首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8:使用反射创建带有泛型的类的新实例

Java 8:使用反射创建带有泛型的类的新实例
EN

Stack Overflow用户
提问于 2015-10-26 08:51:22
回答 2查看 1.8K关注 0票数 2

我有以下方法:

代码语言:javascript
复制
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>实例

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-26 11:04:23

到目前为止,你能做到的最好就是

代码语言:javascript
复制
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是什么)。因此,ComparatorComparator<T>的转换仍然是未经检查的。

票数 4
EN

Stack Overflow用户

发布于 2015-10-26 08:54:48

只需移动演员:

代码语言:javascript
复制
Class<Comparator<T>> c = (Class<Comparator<T>>) Class.forName(className); // (1)
return c.newInstance();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33341699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档