2016-10-15 58 views
0

選中的Java方法調用運行我的代碼,我得到這樣的警告:與ArrayList的

warning: [unchecked] unchecked method invocation: method addAll in interface List is applied to given types 
     snakeDotlist.addAll(genFirstDots()); 
    required: Collection<? extends E> 
    found: List 
    where E is a type-variable: 
    E extends Object declared in interface List 

代碼:

initDisplay(); 

    List<Sprite> snakeDotlist = new ArrayList<>(); 
    snakeDotlist.addAll(genFirstDots()); 



    Sprite tokenSprite = new Sprite((genRandomNumber(0, 64)), (genRandomNumber(0, 48)), 16, 16, "res/snakedot.png"); 

    while(!Display.isCloseRequested()) 
    { 

     if (hasCollided(tokenSprite, snakeDotlist.get(0))) 
     { 
      tokenSprite.updateToken(true); 
      snakeDotlist.get(0).score += 1; 
      snakeDotlist.addAll(genNewDots((int)snakeDotlist.get(0).prev1x, (int)snakeDotlist.get(0).prev1y, (int)snakeDotlist.get(0).prev2x, (int)snakeDotlist.get(0).prev1y)); 
     } 

public static List genFirstDots() 
{ 
    List<Sprite> list = new ArrayList<>(); 
    list.add(new Sprite(3, 0, 16, 16, "res/snakedot.png")); 
    list.add(new Sprite(2, 0, 16, 16, "res/snakedot.png")); 
    list.add(new Sprite(1, 0, 16, 16, "res/snakedot.png")); 
    list.add(new Sprite(0, 0, 16, 16, "res/snakedot.png")); 
    return list; 
} 

我看着其他幾個職位,說snakeDotList的聲明從

List<Sprite> snakeDotlist = new ArrayList<Sprite>(); 

改變

List<Sprite> snakeDotlist = new ArrayList<>(); 

,但我仍然得到警告消息,我不知道如何解決它,有什麼幫助?

+0

只是一個猜測,但嘗試將'genFirstDots()'的返回值從'List'更改爲'List '。 – Turamarth

回答

3

你應該改變這樣的:

public static List genFirstDots() 

這樣:

public static List<Sprite> genFirstDots() 

爲什麼會出現警告的原因是因爲你正在重返genFirstDots()一個List但您要添加的返回值一個List<Sprite>

當沒有給出泛型類型參數時,泛型類型隱含地具有Object類型參數,因此List實際上是List<Object>。當您嘗試將對象列表附加到精靈列表時,對象列表存儲的對象可能與Sprite不兼容,並且無法添加到精靈列表中。因此警告。

+0

這工作,謝謝!沒有意識到我需要指定返回列表的類型。 – Spongeebobble

+0

如果您認爲我的答案回答了您的問題,請考慮點擊該複選標記以接受它! @Spongeebobble – Sweeper

0

你(只)需要你的genFirstDots()聲明從

public static List genFirstDots() 

改變

public static List<Sprite> genFirstDots() 

編譯器會告訴你,它需要一個類型集合,但只找到一個通用的List

旁註:

List<Sprite> snakeDotlist = new ArrayList<>(); 

這是一個用Java 7的推出,讓你跳過的Sprite重複聲明,所謂的diamond operator。它確實改變了snakeDotlist將成爲List<Sprite>的事實。