2016-10-15 27 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>的事实。