public static <T> T bindable(final Class<T> superClass, final Object... constructorParameters) {
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(superClass);
		enhancer.setCallback(new BoundTypeInterceptor<T>());
		
		Class<?>[] argumentTypes = new Class<?>[constructorParameters.length];
		for(int i=0; i<constructorParameters.length; i++) {
			argumentTypes[i] = constructorParameters[i].getClass();
		}
		Constructor<?>[] constructors = superClass.getConstructors();
		for(Constructor<?> c : constructors) {
			if(argumentTypesCompatible(constructorParameters, c.getParameterTypes())) {
				argumentTypes = c.getParameterTypes();
				break;
			}
		}
		return (T) enhancer.create(argumentTypes, constructorParameters);
	}