作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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/
我是一名优秀的程序员,十分优秀!