我有以下方法:
public Comparator<T> getComparator() throws ReflectiveOperationException {
String className = "some.ClassName";
Class<Comparator<T>> c = Class.forName(className); // (1)
return (Comparator<T>) c. newInstance();
}在第(1)行中,我得到了以下错误:
类型不匹配:不能从?>的类
这段代码有什么问题,我应该如何制作一个Comparator<T>实例
发布于 2015-10-26 11:04:23
到目前为止,你能做到的最好就是
public <T> Comparator<T> getComparator() throws ReflectiveOperationException {
Class<? extends Comparator> implementation
= Class.forName("some.ClassName").asSubclass(Comparator.class);
@SuppressWarnings("unchecked")
final Comparator<T> c = implementation.newInstance();
return c;
}请注意,仍然有一个未检查的操作,这是不可避免的。运行时类型令牌Comparator.class生成一个Class<Comparator>而不是Class<Comparator<T>>,它反映类型擦除,并意味着您可以通过asSubclass使用它来确保Class确实实现了Comparator,但您不能确保它对任何<T>都实现Comparator<T>。(请注意,这个方法甚至不知道T是什么)。因此,Comparator到Comparator<T>的转换仍然是未经检查的。
发布于 2015-10-26 08:54:48
只需移动演员:
Class<Comparator<T>> c = (Class<Comparator<T>>) Class.forName(className); // (1)
return c.newInstance();https://stackoverflow.com/questions/33341699
复制相似问题