class.forName可以采用泛型参数吗?鉴于java确实键入了擦除,因此看起来不太可能,因此没有泛型类型信息.在运行时可用.
如果是这样,如果我传递泛型参数会有什么行为?它扔了吗?
我想采用自定义比较器类的类型
Comparator<String[]>
Run Code Online (Sandbox Code Playgroud)
并实例化它.什么是最安全的重写方式?我可以避免吗?
Comparator<String[]>
Run Code Online (Sandbox Code Playgroud)
总是投了?
this.keyComparer =
(Comparator<String[]>) Class.forName(comparatorClass).asSubclass(
Class.forName("Comparator<String[]>")
).newInstance();
Run Code Online (Sandbox Code Playgroud)
你有没有尝试过?我想,不,因为:
Class.forName("java.util.List<String>");
Run Code Online (Sandbox Code Playgroud)
抛出预期的运行时异常。
这是预期的,因为 javaDoc 说:
调用 forName("X") 会导致名为 X 的类被初始化。
并且java.util.List<String>
不是类名。(它包含一个类名,但它是别的东西)