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);
}