3
我想了解java編譯器如何工作有關類型鑄造,但我無法弄清楚。兩個大概不相關的類之間的Java鑄造
,請參見下面的代碼
public class SampleTester{
public static interface A1{}
public static class A2{}
public static class A3 extends A2 implements A1{
public static void main(String[] args){
List<A1> test = new ArrayList<>();
test.add(new A3());
A2 a2 = (A2) test.get(0);
}
}
}
這段代碼編譯,但如果我改變
A2 a2 = (A2) test.get(0);
到
A2 a2 = (Integer) test.get(0);
它提供了編譯錯誤。
類型不匹配:因爲我看到它不能從整數轉換到SampleTester.A2
,A2是不相關的A1以任何方式(完全按整數是沒有關係的),因此如何投來的作品?
很好的答案,謝謝。在你回答之後,我意識到,即使在採用「擴展A2」之後,它也會編譯,意思是(如果我錯了,就糾正我),編譯器不需要看到真正的層次結構連接,只是潛在的一個。 – DsCpp
@DsCpp這是正確的。 – Eran