加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java泛型 – 类或类<?扩展SomeClass>

发布时间:2020-12-14 05:02:34 所属栏目:Java 来源:网络整理
导读:我正在编写一个程序,它将使用 Java反射(即Class.forName())根据用户的输入动态创建类实例.一个要求是我的程序创建的实例必须扩展一个我定义的一个类,称为SomeClass.我的问题是:对于存储这个类类型,我应该使用有界泛型,Class扩展SomeClass还是简单的无界通用
我正在编写一个程序,它将使用 Java反射(即Class.forName())根据用户的输入动态创建类实例.一个要求是我的程序创建的实例必须扩展一个我定义的一个类,称为SomeClass.我的问题是:对于存储这个类类型,我应该使用有界泛型,Class扩展SomeClass>还是简单的无界通用类?我发现一些Java书籍说,Class是使用无界通配符的好习惯之一,但我想知道这是否适用于我的程序中的情况.

如果您发现我的问题不够清楚或需要某些信息,请随时通知我.

解决方法

你应该使用Class扩展SomeClass>因为这是泛型的.

当你调用Class.forName时,检查一下SomeClass.class.isAssignable来自新的类.否则,你应该抛出一个IllegalArgumentException或ClassCastException.

编辑:或者,呼叫asSubclass(SomeClass.class)将为您做这个.

例如:

public SomeClass instantiate(String name)
  throws ClassNotFoundException,InstantiationException,IllegalAccessException {

    Class<?> raw = Class.forName(name);

    //throws ClassCastException if wrong
    Class<? extends SomeClass> generic = raw.asSubclass(SomeClass.class);

    // do what you want with `generic`

    return generic.newInstance();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读