2016-10-15 1 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, но вы добавляете возвращаемое значение a 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<>(); 

Это так называемый diamond operator, который был введен с Java 7 и позволяет пропускать дубликат декларации Sprite. Это меняет тот факт, что snakeDotlist будет List<Sprite>.