开发者社区> 问答> 正文

java代码在擦拭了类型参数后,怎么保证我输入的数据是符合我规定的类型参数的??报错

 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类,这个编译的时候就已经完成了。

展开
收起
爱吃鱼的程序员 2020-06-22 13:08:46 546 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    类型擦除,是指程序运行的时候不知道具体类型都作为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,这才叫擦拭

    2020-06-22 13:09:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载