java核心技术 卷1里面泛型一章中“泛型类的静态上下文中类型变量无效”这一节不能理解

查看:107
本文介绍了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如何知道应该返回什么类型呢?所以这种用法是不允许的。

反过来,如果singleInstancegetSingleInstance不是静态的,而是实例变量和方法的话就没问题,因为这时候需要返回何种类型是明确的:

Singleton<AType> s = new Singleton<AType>();
AType a = s.getSingleInstance();

这篇关于java核心技术 卷1里面泛型一章中“泛型类的静态上下文中类型变量无效”这一节不能理解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆