java核心技术 卷1里面泛型一章中“泛型类的静态上下文中类型变量无效”这一节不能理解
本文介绍了java核心技术 卷1里面泛型一章中“泛型类的静态上下文中类型变量无效”这一节不能理解的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
书里面这么写的:
public class Singleton<T>
{
private static T singleInstance //ERROR
private static T getSingleInstance() //ERROR
{
if(singleInstance == null)
return singleInstance;
}
}
类型擦除后,只剩下Singleton类,它只包含一个singleInstance域。因此,禁止使用带有类型变量的静态域和方法。
不太理解什么意思,为什么跟类型擦除有关系?请高手指点一下
解决方案
先想想你要怎么使用这个方法,我想应该是这样:
AType a = Singleton.getSingleInstance();
问题来了,上面的getSingleInstance
如何知道应该返回什么类型呢?所以这种用法是不允许的。
反过来,如果singleInstance
和getSingleInstance
不是静态的,而是实例变量和方法的话就没问题,因为这时候需要返回何种类型是明确的:
Singleton<AType> s = new Singleton<AType>();
AType a = s.getSingleInstance();
这篇关于java核心技术 卷1里面泛型一章中“泛型类的静态上下文中类型变量无效”这一节不能理解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文