2017-03-29 101 views
-3

考慮下面的代碼:奇怪鑄造相關的問題在Java中

public class ListDemo { 

    List<Inner> inners; 

    public ListDemo() { 
     this.inners = new ArrayList<>(); 
    } 

    private void load(){ 
     SomeClzz.load(inners); 
    } 

    private class Inner implements TestInterface { 

     @Override 
     public void bla() { 
      System.out.println("Bla"); 
     } 

    } 
} 

與接口:

public interface TestInterface { 
    public void bla(); 
} 

和類:

public class SomeClzz { 
    public static void load(List<TestInterface> test){ 
     for (TestInterface testInterface : test) { 
      testInterface.bla(); 
     } 
    } 
} 

我創造了這個假的代碼基礎上一個真實世界的例子,因爲我想看看我是否可以找出問題並發現load方法有錯誤。

爲什麼SomeClzz.load(inners);給出了一個錯誤:內部函數不能從List<Inner>轉換爲List<TestInterface>

+3

它給了什麼錯誤? – nickb

+0

@nickb我編輯了問題以指定錯誤 –

回答

1

簡單的變化將使其工作:

public static void load(List<? extends TestInterface> test){ 
    for (TestInterface testInterface : test) { 
     testInterface.bla(); 
    } 
} 

UPDATE: 你可以找到答案here

總之。

List<Inner>不是List<TestInterface>的子類型。

對於泛型編程而言,這是一個常見的誤解,但您需要了解這一點,因爲泛型非常重要。