我使用java.lang.reflect.Proxy
代理对象。
我有这堂课:
public class TransportableImpl extends Transportable{
public class OrderInvoker extends InvocationHandler{
...
}
}
我在这里构建代理:
Transportable t = new TransportableImpl();
Order myOrder = new OrderImpl();
Class proxyClass = Proxy.getProxyClass(getClass().getClassLoader(), Transportable.class, Order.class);
Object serializable = proxyClass.getConstructor(new Class[]{InvocationHandler.class}).newInstance(t.new OrderInvoker(myOrder));
问题是:类是原始类型和
Class<? extends Order & Transportable> proxyClass =
(Class<? extends Order & Transportable>)
Proxy.getProxyClass(getClass().getClassLoader(),
Transportable.class, Order.class);
难以阅读。
有什么想法吗?
答案 0 :(得分:2)
Proxy#getProxyClass(ClassLoader, Class)
方法声明为
public static Class<?> getProxyClass(ClassLoader loader,
Class<?>... interfaces)
因此其返回类型为Class<?>
。正常的语法是
Class proxyClass<?> = Proxy.getProxyClass(getClass().getClassLoader(), Transportable.class, Order.class);
技术上你可以做(带警告)
public <T extends Order & Transportable> void doSomething() {
Class<T> proxyClass = (Class<T>) Proxy.getProxyClass(Driver.class.getClassLoader(),
Transportable.class, Order.class);
}
但是你没有任何收获,因为你几乎不需要使用那个T
变量。 Class
类提供了很少使用它的方法,即getConstructor(Class...)
和newInstance()
。但同样,反思的全部意义在于,您只能在运行时知道类类型,而不是在泛型有用的编译时。