Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8:使用反射创建具有泛型的类的新实例_Java_Generics_Reflection_Java 8 - Fatal编程技术网

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);