我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:万喜彩票 > 泛型方法 >

还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类

归档日期:07-01       文本归类:泛型方法      文章编辑:爱尚语录

  还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数?

  还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数?

  不要回答因为泛型类型参数需要声明对象时指定,而静态不需要对象就可以引用什么的。这个根本就不是原因。泛型和运行时系统没有一点关系。我解释一下在静态变量中不能使用类型参数的原...

  不要回答因为泛型类型参数需要声明对象时指定,而静态不需要对象就可以引用什么的。这个根本就不是原因。泛型和运行时系统没有一点关系。

  我解释一下在静态变量中不能使用类型参数的原因:因为静态变量为所有实例共享,如果可以使用,那么当使用不同的类型参数实例化对象时会导致编译器插入强制类型转换代码错误(1.5版泛型指南上有实例解释)。(换句话说泛型的实现机制擦拭法决定了不能再静态变量中使用类型参数)。但是这个问题并不影响静态方法中使用类型参数,而且静态方法可以是泛型方法,既然可以使泛型方法,那我引用类级别的类型参数又怎么了嘛,完全可以的啊。

  回楼下的,我只能回答在静态变量中不能使用类型参数,不能回答在静态方法中为什么不能引用类级别的类型参数,我的回答只是抛砖引玉。以前这个问题我问过,很多人都给过我如上回答,其实都不正确。最近看了深入JVM和java1.5泛型指南中文版,又想起这个问题。只想大家帮忙从实现机制擦拭法的角度回答,而不是胡乱猜测。展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  知道合伙人软件行家采纳数:1357获赞数:6070向TA提问展开全部你好,我觉得最主要的原因是因为泛型擦除。

  所以,非静态方法正是由于需要先有对象,进而在使用泛型的时候可以确定安全检查的限制条件。

  而静态方法不需要构件对象,所以他在调用方法是,根本没有判断参数的约束条件,所以虚拟机压根就不希望这种事情发生,所以在编译时就报错了。

  展开全部你想想,不管为泛型传入哪一种实参类型,对java来说,依然被当成同一个类处理。那这样的话,你传什么类型给静态方法还有必要吗?没必要。

  但是非静态方法就不一样了,你传个dog类,就声明一个dog对象;你传cat类,就声明一个cat对象。

本文链接:http://apps-n-tabs.com/fanxingfangfa/605.html