首页 / JAVA / Java泛型-获取类的实例
Java泛型-获取类的实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java泛型-获取类的实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1379字,纯文字阅读大概需要2分钟。
内容图文
![Java泛型-获取类的实例](/upload/InfoBanner/zyjiaocheng/660/c4ff15eafcbe4e668d88677ff529b76c.jpg)
我有一个名为Data的抽象类,带有一个getInstance()方法,该方法应返回Data具体子类的实例.
我想将一个字符串传递给getInstance方法,并且该字符串将确切定义将要返回的类.
到目前为止,我有:
public abstract class Data {
private Map<String, Data> instances;
public <T extends Data> T getInstance(Class<T> type, String dataName) {
return type.cast(instances.get(dataName));
}
}
getInstance()方法在实例映射中查找正确的实例.我认为这应该是可以的,只要该地图已填充(在Spring之前),但调用者必须匹配Class< T>. type参数和String dataName参数.
有什么办法可以删除Class< T>类型参数,没有泛型警告?
解决方法:
不,如果您在不知道类型的运行时类的情况下尝试转换为通用类型,将始终收到警告.不,没有方法不能不提供泛型类的实例而将其作为参数-泛型在运行时被擦除.
在没有显式强制转换的情况下不获取警告的唯一方法是返回Object或Data(取决于Map),并要求用户进行强制转换:
public Data getInstance(String dataName) {
return instances.get(dataName);
}
// OR
public Object getInstance(String dataName) {
return instances.get(dataName);
}
在我看来,最好同时提供两种方法以方便使用:Data getInstance(String)和< T extended Data> T getInstance(Class< T> ;,字符串).从本质上讲,这也是OSGI在BundleContext类中所做的,因此能够获得服务引用,不同之处在于,不可能获得具有任意ID的服务(ID始终是类的名称):
ServiceReference<?> BundleContext#getServiceReference(java.lang.String clazz)
ServiceReference<S> BundleContext#getServiceReference(java.lang.Class<S> clazz)
内容总结
以上是互联网集市为您收集整理的Java泛型-获取类的实例全部内容,希望文章能够帮你解决Java泛型-获取类的实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。