偶然遇到的Java泛型错误,百思不得其解。

戴威 发布于 2013/05/02 21:39
阅读 1K+
收藏 1

貌似是类级别泛型会使得类方法的泛型无效

import java.util.List;

public class Main {

	public static class Test<T> {
		
		public List<String> getList() {
			return null;
		}
	
	}

	public static void main(String[] args) {
		String value = new Test().getList().get(0);
	}

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object to String
at Main.main ( Main.java:14 )
加载中
0
逝水fox
逝水fox

好像确实这样...

new Test().getList()编译器识别返回类型是List

但是改成

Test<?> test = new Test();

test.getList() 就可以了

绝望的八皮
绝望的八皮
遇到过这个问题。貌似就是如果不给范型参数就把所有的范型信息都擦出了
1
Sam_Su
Sam_Su

Java中的泛型是类型擦除的,只在编译期有效,运行期被删除,所有的泛型参数在编译后都会被清除掉.(C++中的泛型生命周期则是在运行期)

0
XuMeijin
XuMeijin
null如何转换为String?
艳沐石
艳沐石
null可以转换为除基本类型以外的任何一种类型,通过强制转换即可! 但是通过null instance String 返回的是false
0
戴威
戴威

引用来自“XuMeijin”的答案

null如何转换为String?
拜托回答之前稍微过一下脑子好吗?
0
Ryan-瑞恩
Ryan-瑞恩

cannot convert from Object to String 

什么情况?

0
chenganshi
chenganshi
的确是有问题啊。
0
戴威
戴威

引用来自“chenganshi”的答案

编译级别问题,我1.6的没有问题,可以用的。
复制都会出错……
0
戴威
戴威

引用来自“逝水fox”的答案

好像确实这样...

new Test().getList()编译器识别返回类型是List

但是改成

Test<?> test = new Test();

test.getList() 就可以了

的确编译通过了,但是略微蛋疼啊。
逝水fox
逝水fox
感觉像是,如果一个引用本身用的是原生类型,编译器就强制视他的所有调用都已经被类型擦除了。莫非是编译器偷懒...
0
吴中兴
       String value =new Test<String>().getList().get(0);
返回顶部
顶部