Java:将MyClass转换为List <myclass> </myclass>

时间:2015-03-30 18:08:12

标签: java casting

为什么可以在没有编译错误的情况下将MyClass对象转换为List<MyClass>(只是有'未选中'警告),尽管MyClass没有实现List接口,并且同时时间不可能以相同的方式投射,例如,String类。

谢谢。

1 个答案:

答案 0 :(得分:3)

如果完全不可能进行转换,编译器将创建编译器错误。但是当你转换为一个接口(并且你的原始类不是final)时,这个转换可能会成功。

即使它可能不存在,对于尚未写入子类MyClass并实现List的类,即使这对我们没有任何意义,也是可能的。

由于这种可能性,编译器必须允许该转换。但是如果没有这样的子类,这仍然会在运行时产生ClassCastException

JLS, Section 5.5.1,将S投射到T时说明:

  
      
  • 如果T是接口类型:

         
        
    • 如果S不是最终类(第8.1.1节),那么,如果存在T的超类型X和S的超类型Y,那么X和Y都可以证明是不同的参数化类型,并且X和Y的擦除是相同的,发生编译时错误。

           

      否则,演员在编译时总是合法的(因为即使S没有实现T,S的子类可能)。

    •   
    • 如果S是最终类(第8.1.1节),那么S必须实现T,否则会发生编译时错误。

    •   
  •   

(大胆强调我的)