Tag: generics

如何在运行时获取generics类型?

这是我的代码:ExecutorImp扩展了AbstractExecutor,它提取了其实现者的相同执行逻辑(ExecutorImp就是一个例子),当调用ExecutorImp的execute()方法时,它将调用其超类型中的方法,但是超类型(AbstractExcutor) )应该知道另一个绑定到实现者的类(在示例中,它是User类): import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; abstract class AbstractExecutor { public void execute() throws Exception { ArrayList list = new ArrayList(); // here I want to get the real type of ‘E’ Class cl = this.getClass().getTypeParameters()[0].getGenericDeclaration().getClass(); Object o = cl.getConstructor(String.class).newInstance(“Gate”); list.add((E) o); System.out.println(format(list)); } public abstract String format(ArrayList list); public abstract String getType(); } public […]

javagenerics协方差

我无法理解以下文章: http : //www.ibm.com/developerworks/java/library/j-jtp01255.html 下, generics不是协变的 作者说, 因为ln是List,所以添加Float似乎是完全合法的。 但是如果ln与li混淆,那么它将破坏li定义中隐含的类型安全承诺 – 它是一个整数列表,这就是generics类型不能协变的原因。 我无法理解它所说的“如果ln与li混淆”的部分。 作者对别名的含义是什么?(参考?)。 引用行上方的代码片段似乎说明了什么在java中是非法的而不是为什么。 如果有人能用一个例子来解释,那对我来说会很有帮助。 提前致谢。

generics,数组和ClassCastException

我认为这里肯定会有一些我不知道的微妙内容。 考虑以下: public class Foo { private T[] a = (T[]) new Object[5]; public Foo() { // Add some elements to a } public T[] getA() { return a; } } 假设您的main方法包含以下内容: Foo f = new Foo(); Double[] d = f.getA(); 您将获得带有消息java.lang.Object的CastClassException ,无法将其CastClassException为java.lang.Double 。 谁能告诉我为什么? 我对ClassCastException理解是,当您尝试将对象强制转换为无法转换的类型时,它会被抛出。 也就是说,它不是一个实例的子类(引用文档)。 例如: Object o = new Double(3.); Double d […]