回楼下的,我只能回答在静态变量中不能使用类型参数,不能回答在静态方法中为什么不能引用类级别的类型参数,我的回答只是抛砖引玉。以前这个问题我问过,很多人都给过我如上回答,其实都不正确。最近看了深入JVM和java1.5泛型指南中文版,又想起这个问题。只想大家帮忙从实现机制擦拭法的角度回答,而不是胡乱猜测。
解决方案 »
- 做了个相册,但是会同时显示两张大小不同的照片相互覆盖,求助高手
- html 中的select标签提交到之后的取值????
- 超级晕,同样的一句代码,在两个地方一个正确,一个不正确。我几乎都是复制过来的,高手请进。
- 一个关于WEB页面(MVC)与后台SQL交互时发生的一个难题,高手请进。
- 救命啊!~小问题把人都弄死了!!!
- 英文操作系统java System。out中文全是乱码?
- 我写的代码有一点小问题!请大家帮忙看看!
- 我的系统是xp,我已经安装了j2sdk1.401,为什么还是不能调试呢???
- JTable中显示数据库查询结果出现乱码
- window XP 下装JDK1.4.0的问题
- 请问,最后一句return是干什么的
- 一起来学习Java吧 欢迎进来
我想,应该是这样的吧:
首先,在JVM加载Class的时候会将类中所有的常量,静态常量,静态方法写到内存的方法区内;
其次,所有的常量,静态常量和静态方法在方法区内有且只有一份,并为所属类所创建的所有对象共享;
那么用你的方式解释,问题来了,如果静态常量和静态方法中使用了类的类型变量,当程序猿使用不同的类型参数实例化对象时会导致编译器插入强制类型转换代码错误(1.5版泛型指南上有实例解释);
例如,存在一个C泛型类,其静态方法中使用了类的类型变量,先后定义了A对象,B对象,那么如果A对象先把类的类型变量初始化为String,而B对象后把类的类型变量初始化为Integer。此时,静态方法中类的类型变量为Integer类型,而A对象又调用了这个静态方法。会出现你说的错误~ 类似于数据库中的读脏数据~
以上你应该明白;
那么关键在于:
独立的泛型静态方法,在不考虑多线程的情况下,同一时间点,只会被初始化并调用一次,不会出现重叠初始化并错误调用,不会出现类似数据库中读脏数据的情况,所以不会出现强制类型转换的代码错误。