class.forName可以采用通用参数吗?鉴于java确实键入了擦除,因此看起来不太可能,因此没有泛型类型信息。在运行时可用。
如果是这样,如果我传递泛型参数会有什么行为?它扔了吗?
我想采用类型为
的自定义比较器类Comparator<String[]>
并实例化它。什么是最安全的重写方式?我可以避免
Comparator<String[]>
什么都投了?
this.keyComparer =
(Comparator<String[]>) Class.forName(comparatorClass).asSubclass(
Class.forName("Comparator<String[]>")
).newInstance();
答案 0 :(得分:4)
Class.forName("java.util.List<String>");
抛出预期的运行时异常。
这是预期的,因为javaDoc说:
对forName(“X”)的调用会导致名为X的类被初始化。
java.util.List<String>
不是班级名称。 (它包含一个类名,但是其他东西)
答案 1 :(得分:2)
要通过反思创建newInstance()
,您应该这样做:
Class<ArrayList<String>> list = (Class<ArrayList<String>>)
Class.forName("java.util.ArrayList");
ArrayList<String> l = list.newInstance();
现在你可以初始化了。你的比较器类
有关详细信息,请查看Java Generics FAQ