代码之家  ›  专栏  ›  技术社区  ›  MRalwasser

为什么泛型列表可以强制转换为其类型参数

  •  3
  • MRalwasser  · 技术社区  · 15 年前


    如果参数是 但不是通用的超级接口?

    //Connection can be substituted by any interface
    List<Connection> list = null;
    Connection c = (Connection) list; 
    
    3 回复  |  直到 13 年前
        1
  •  12
  •   Michael Borgwardt    15 年前

    这与类型参数无关。这同样有效:

    List<String> list = null;
    Connection c = (Connection) list; 
    

    可能是因为 List 是接口类型。列表引用可能包含一个对象,该对象同时实现 列表 Connection (不管是什么,类或接口),因此cast是为它工作的。

    能够 好吧,编译器允许了。它只会拒绝理论上不可能的强制类型转换,即涉及独立继承层次结构中的具体类型:

        JComponent c = null;
        ArrayList l = (ArrayList) c;
    

    您可以在 Java Language Specification -大约有30行密语律师。

        2
  •  0
  •   Andrew Hare    15 年前

    静态转换是开发人员告诉编译器的一种方法 编译器不会阻止您执行在执行时引发异常的操作。

        3
  •  0
  •   Alex Abdugafarov    15 年前

    if(a instanceof bClass){
        ((bClass)a).doSomething(...);
    }