首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有Class.forName的泛型和asSubClass

带有Class.forName的泛型和asSubClass
EN

Stack Overflow用户
提问于 2011-01-28 19:54:35
回答 2查看 4.6K关注 0票数 5

class.forName可以接受泛型参数吗?这看起来不太可能,因为java确实进行了类型擦除,所以没有泛型类型信息。在运行时可用。

如果是这样,如果我传递泛型参数,会有什么行为呢?它会抛出吗?

我想要使用一个自定义的比较器类

代码语言:javascript
运行
复制
Comparator<String[]> 

并实例化它。重写它的最安全的类型方法是什么?我可以避免

代码语言:javascript
运行
复制
Comparator<String[]> 

演员阵容吗?

代码语言:javascript
运行
复制
this.keyComparer =
(Comparator<String[]>) Class.forName(comparatorClass).asSubclass(
      Class.forName("Comparator<String[]>")
 ).newInstance();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-28 20:05:34

你试过了吗?我想,不是,因为:

代码语言:javascript
运行
复制
 Class.forName("java.util.List<String>");

引发预期的运行时异常。

这是意料之中的,因为javaDoc说:

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

并且java.util.List<String>不是一个类名。(它包含类名,但它是其他名称)

票数 4
EN

Stack Overflow用户

发布于 2011-01-28 20:00:13

为了通过反射创建newInstance(),您应该执行以下操作:

代码语言:javascript
运行
复制
Class<ArrayList<String>> list = (Class<ArrayList<String>>)
                                Class.forName("java.util.ArrayList");
ArrayList<String> l = list.newInstance();

现在你可以初始化了。您的比较器类就是这样

有关更多信息,请查看Java Generics FAQ

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4827910

复制
相关文章

相似问题

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