class Test<T,F> {
public void present(T t,F f)
{
System.out.print(t);
System.out.print(f);
}
}如果我建立了Test的对象Test<Integer,Integer> test=new Test<Integer,Integer>();然后调用test.present(22,"string");报错,我想知道这个类型错误是怎么被检查出来的。因为擦拭了以后,T,F应该是Object类,这个编译的时候就已经完成了。
类型擦除,是指程序运行的时候不知道具体类型都作为Object,但在编译的时候,编译器是知道类型的,所以编译的时候会报错。 一句惊醒梦中人,谢谢!可能表述的不太准确你哪里擦除类型了啊?在你的例子中,T=Int,F=Int,哪里是Object啊现在明白了,谢谢啊
首先这个错误是在编译的时候出现的
因为你加了泛型<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;line-height:21.988636016845703px;background-color:#FFFFFF;"><Integer,Integer>,当你调用<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;line-height:21.988636016845703px;background-color:#FFFFFF;">test.present(22,"string");当然报错
编译的这个过程搞错了。。。谢谢你new的时候已经为泛型指明了类型,jvm编译会判断之前对jvm的编译过程弄错了,现在明白了,谢谢。Testt=test,这才叫擦拭版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。