Java8:使用反射创建具有泛型的类的新实例
我有以下方法:Java8:使用反射创建具有泛型的类的新实例,java,generics,reflection,java-8,Java,Generics,Reflection,Java 8,我有以下方法: public Comparator<T> getComparator() throws ReflectiveOperationException { String className = "some.ClassName"; Class<Comparator<T>> c = Class.forName(className); // (1) return (Comparator<T>) c. newInstan
public Comparator<T> getComparator() throws ReflectiveOperationException {
String className = "some.ClassName";
Class<Comparator<T>> c = Class.forName(className); // (1)
return (Comparator<T>) c. newInstance();
}
公共比较器getComparator()抛出ReflectiveOperationException{
String className=“some.className”;
Class c=Class.forName(className);//(1)
返回(比较器)c.newInstance();
}
在第(1)行中,我得到以下错误:
类型不匹配:无法从类转换为
阶级
这段代码有什么问题,我应该如何制作一个比较器实例?只需移动演员阵容:
Class<Comparator<T>> c = (Class<Comparator<T>>) Class.forName(className); // (1)
return c.newInstance();
Class c=(Class)Class.forName(className);//(1)
返回c.newInstance();
试试这个解决方案
@SuppressWarnings("unchecked")
public Comparator<T> getComparator() throws Exception {
String className = "some.ClassName";
Class<?> c = Class.forName(className); // (1)
return (Comparator<T>) c. newInstance();
}
@SuppressWarnings(“未选中”)
公共比较器getComparator()引发异常{
String className=“some.className”;
Class c=Class.forName(className);//(1)
返回(比较器)c.newInstance();
}
到目前为止,您能得到的最好结果是
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;
}
公共比较器getComparator()抛出ReflectiveOperationException{
ClassIt会起作用,但它是一种java2风格的方法。我正在寻找java5风格的方法。而且,它会生成警告:类型安全:从类到类的未检查强制转换Class@Antonio,您所说的“java5风格”是什么意思
将返回一个类
对象,您需要将其强制转换为您想要的任何对象,并确保强制转换工作正常…因为编译器无法确保字符串“some.ClassName”是实现比较器的类的名称
@Antonio您是指类似字符串ClassName=“some.ClassName”的名称吗;Class aClass=Class.forName(className);Object obj=aClass.newInstance();返回Comparator.Class.cast(obj);