具有Class.forName的泛型和asSubClass

Fak*_*een 5 java generics

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)

And*_*s_D 4

你有没有尝试过?我想,不,因为:

 Class.forName("java.util.List<String>");
Run Code Online (Sandbox Code Playgroud)

抛出预期的运行时异常。

这是预期的,因为 javaDoc 说:

调用 forName("X") 会导致名为 X 的类被初始化。

并且java.util.List<String>不是类名。(它包含一个类名,但它别的东西)