为什么可以强制转换泛型类?

Ctomek

Java泛型是不变的,因此无法进行此类转换:

List<Object> li = (List<Object>)new ArrayList<Integer>();

但是在下面的第4行代码中,我可以从转换List<Integer>List<T>,这里T可以是任何类型。为什么允许这种类型的演员?

我知道它会生成有关未经检查的强制类型转换的警告,但要点是,此强制类型转换可以在参数化方法内部进行,但不能在常规代码中进行。请记住,泛型是不变的,为什么允许它?在普通代码中,List<Integer>我只能将其List<Integer>强制转换为没有任何意义,而其他强制转换是非法的。那么,允许进行第4行中的强制转换有什么意义呢?

我知道泛型类型会在编译时删除,并以结尾List xlist = (List)list,但是在删除这些类型之前,很明显,除非仅在某人通过Integer的情况下才接受此强制类型转换,否则该强制类型转换是不可接受的,因为el这样做没有多大意义。

class Test {

    public static <T> void t(List<Integer> list, T el) {
        List<T> xlist = (List<T>)list; //OK
        xlist.add(el);
    }

    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>();
        t(list, "a");
        t(list, "b");

        //prints [a, b] even if List type is Integer
        System.out.println(list);

    }
}
newacct

在Java中,执行在编译时已知总是不正确或始终正确的显式强制转换是编译错误。在编译时,List<Integer>toList<Object>强制转换始终是不正确的,因此是不允许的。从铸造List<Integer>List<T>在编译时不知道是不正确始终-这将是正确的,如果TInteger,并T在编译的时候是不知道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不能将Objects数组转换为泛型类的泛型子类的数组?

来自分类Dev

强制在泛型类中进行强制转换

来自分类Dev

Java:为什么泛型类不强制执行相同类型?

来自分类Dev

为什么协变隐式强制转换会忽略泛型约束?

来自分类Dev

没有显式强制转换的泛型集合编译错误-为什么?

来自分类Dev

强制转换为泛型类型java(为什么未选中)

来自分类Dev

当where约束应该足够时,为什么需要强制转换泛型类型

来自分类Dev

Java-是否可以在没有未经检查的强制转换的情况下混合类型的容器(非泛型类)?

来自分类Dev

泛型和强制转换

来自分类Dev

泛型的Typesafe强制转换

来自分类Dev

为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

来自分类Dev

为什么泛型约束T扩展Comparable <T>不足以避免强制转换?

来自分类Dev

为什么在测试受约束的泛型类型时直接强制转换会失败,而“ as”运算符会成功?

来自分类Dev

什么是泛型类

来自分类Dev

什么是泛型类

来自分类Dev

有没有一种方法可以将类强制转换为具有特定参数的类java.lang.Class <>泛型?

来自分类Dev

为什么不可能注入泛型类?

来自分类Dev

为什么不能将`this`转换为泛型?

来自分类Dev

为什么我必须转换这个泛型类型?

来自分类Dev

C#如何在泛型类型实现某些类时强制转换类

来自分类Dev

Java泛型和强制转换泛型类型

来自分类Dev

为什么Java泛型不允许在泛型类型上进行类型转换?

来自分类Dev

强制转换泛型类型-为什么带括号“()”的直接强制转换会产生编译错误,但是使用“ as”关键字的强制转换有效呢?

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

为什么在Java中可以将接口的泛型方法实现为非泛型?

来自分类Dev

强制转换和泛型约束

来自分类Dev

无效的强制转换例外泛型

来自分类Dev

强制转换和泛型如何工作?

Related 相关文章

  1. 1

    为什么不能将Objects数组转换为泛型类的泛型子类的数组?

  2. 2

    强制在泛型类中进行强制转换

  3. 3

    Java:为什么泛型类不强制执行相同类型?

  4. 4

    为什么协变隐式强制转换会忽略泛型约束?

  5. 5

    没有显式强制转换的泛型集合编译错误-为什么?

  6. 6

    强制转换为泛型类型java(为什么未选中)

  7. 7

    当where约束应该足够时,为什么需要强制转换泛型类型

  8. 8

    Java-是否可以在没有未经检查的强制转换的情况下混合类型的容器(非泛型类)?

  9. 9

    泛型和强制转换

  10. 10

    泛型的Typesafe强制转换

  11. 11

    为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

  12. 12

    为什么泛型约束T扩展Comparable <T>不足以避免强制转换?

  13. 13

    为什么在测试受约束的泛型类型时直接强制转换会失败,而“ as”运算符会成功?

  14. 14

    什么是泛型类

  15. 15

    什么是泛型类

  16. 16

    有没有一种方法可以将类强制转换为具有特定参数的类java.lang.Class <>泛型?

  17. 17

    为什么不可能注入泛型类?

  18. 18

    为什么不能将`this`转换为泛型?

  19. 19

    为什么我必须转换这个泛型类型?

  20. 20

    C#如何在泛型类型实现某些类时强制转换类

  21. 21

    Java泛型和强制转换泛型类型

  22. 22

    为什么Java泛型不允许在泛型类型上进行类型转换?

  23. 23

    强制转换泛型类型-为什么带括号“()”的直接强制转换会产生编译错误,但是使用“ as”关键字的强制转换有效呢?

  24. 24

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  25. 25

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  26. 26

    为什么在Java中可以将接口的泛型方法实现为非泛型?

  27. 27

    强制转换和泛型约束

  28. 28

    无效的强制转换例外泛型

  29. 29

    强制转换和泛型如何工作?

热门标签

归档