java删除通用方法_java-通用删除概念

您能否帮助我在这里理解通用概念.

// Can't create an instance of T.

class Gen {

T ob;

Gen() {

ob = new T(); // Illegal!!!

}

public static void main() {

Gen genobj = new Gen(); //Error

}

}

编译Java代码时,所有通用类型

信息被删除(删除).这意味着用其绑定替换类型参数

类型,如果未指定显式绑定,则为Object,然后应用适当的

强制转换(由类型参数确定)以保持与类型的类型兼容性

由类型参数指定.编译器还强制执行此类型兼容性.

我的问题:-为什么Java编译器在这里抛出错误?

崩溃后厌恶.

谢谢

解决方法:

这里有几种方法可以解决:

从逻辑POV:

甚至不能保证您使用的任何模板参数T都有默认构造函数.显然,这带来了如何处理缺少默认构造函数的问题.可能的解决方案是产生运行时错误,编译时错误或禁止任何不提供默认构造函数的T.后者显然会破坏允许使用任何T的模板定义.运行时错误会使事情复杂得多,并产生与上述相同的问题.首先仍然要防止此行为,并抛出编译时错误.

从内部来看:

假设我们可以使用提供的代码.那怎么办?由于擦除,新的T()将产生一个Object.但是,如果T为整数怎么办?好吧,我们被搞砸了.对象不是整数,因此我们将获得一个普通的类转换异常.

因此,总而言之:从实用的POV开始,不允许上述内容进行编译,而且破坏了Java中泛型的当前定义.

标签:java

来源: https://codeday.me/bug/20191010/1886423.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值