java的泛型是个有趣的东西
java的泛型是个有趣的东西
蚂蚁的世界 发表于3年前
java的泛型是个有趣的东西
  • 发表于 3年前
  • 阅读 132
  • 收藏 4
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

因为泛型的擦除(erasure),任何在运行时需要知道确切类型信息的操作都将无法工作。

public class Erased<T> {
    private final int SIZE = 100;
    public static void f(Object arg){
        if (arg instanceof T){}        // error
        T var = new T();                  // error
        T[] array = new T[SIZE];    //  error
        T[] array = (T[])new Object[SIZE]; // unchecked warning
    }
}

请看上述代码,"arg instanceof T",编译器会认为写这段程序的人是想检查arg是否为某一个类。但是erasure导致这个人的愿望落空,所以就把这段语句置为error。


编译器发现这段代码时“T[] array = new T[SIZE]”,它不知道到底要创建一个什么类型的数组,它没有选择把这段代码编译成创建Object数组,也许有它的理由,但是我不知道为什么。也许它认为这不符合编写这段程序的人的愿望。


编译器发现这段代码“T[] array = (T[])new Object[SIZE]",它认为这可以通过error检查,但是这里有个警告,会有隐藏的问题。然后它把这段代码编译成了Object[] array = new Object[SIZE]。


共有 人打赏支持
粉丝 5
博文 25
码字总数 7187
×
蚂蚁的世界
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: