gpt4 book ai didi

java - 使用泛型代理

转载 作者:行者123 更新时间:2023-11-30 09:13:28 25 4
gpt4 key购买 nike

我使用 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);

很难阅读。

有什么想法吗?

最佳答案

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() .但同样,反射(reflection)的全部要点是您只在运行时知道类类型,而不是在泛型有用的编译时。

关于java - 使用泛型代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com