Java 用泛型代理
我使用Java 用泛型代理,java,generics,proxy-classes,Java,Generics,Proxy Classes,我使用java.lang.reflect.Proxy来代理对象 我有这门课: public class TransportableImpl extends Transportable{ public class OrderInvoker extends InvocationHandler{ ... } } 我在这里构建代理: Transportable t = new TransportableImpl(); Order myOrder = new OrderIm
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);
Class该方法声明为
public static Class<?> getProxyClass(ClassLoader loader,
Class<?>... interfaces)
公共静态类getProxyClass(类加载器,
类…接口)
因此,其返回类型为Class
。通常的语法是
Class proxyClass<?> = Proxy.getProxyClass(getClass().getClassLoader(), Transportable.class, Order.class);
Class-proxyClass=Proxy.getProxyClass(getClass().getClassLoader(),Transportable.Class,Order.Class);
从技术上讲,你可以这样做(警告)
public void doSomething(){
类proxyClass=(类)Proxy.getProxyClass(Driver.Class.getClassLoader(),
可运输类、订单类);
}
但这对您没有任何好处,因为您几乎不需要使用T
变量。该类提供了很少的使用它的方法,即和。但同样,反射的全部要点是,您只知道运行时的类类型,而不知道泛型有用的编译时的类类型。是一个很难阅读的问题吗?是的。“代码>类< /代码>不是精确的。反问:你想写什么,即你认为什么足够精确,但容易阅读?你能提供一些伪代码来帮助我们理解你的目标吗?如果是关于可读性,我建议把这个问题转移到CodeReview上哦,CodeReview是新的吗?是的,就是这样。我把它命名为PROXY而不是T。
public <T extends Order & Transportable> void doSomething() {
Class<T> proxyClass = (Class<T>) Proxy.getProxyClass(Driver.class.getClassLoader(),
Transportable.class, Order.class);
}