有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用ArrayList调用Java未经检查的方法

当我运行代码时,会收到以下警告:

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<>();

但我仍然收到警告信息,我不知道如何解决它,有什么帮助吗


共 (2) 个答案

  1. # 1 楼答案

    您(只)需要将genFirstDots()的声明从

    public static List genFirstDots()
    

    public static List<Sprite> genFirstDots()
    

    编译器告诉您,它需要一个类型化集合,但只找到了一个泛型List

    旁注:

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

    这就是所谓的diamond operator,它是在Java7中引入的,允许您跳过Sprite的重复声明。它确实改变了snakeDotlist将成为List<Sprite>的事实

  2. # 2 楼答案

    你应该改变这一点:

    public static List genFirstDots()
    

    为此:

    public static List<Sprite> genFirstDots()
    

    出现警告的原因是,您在genFirstDots()中返回了一个List,但将返回的值添加到了List<Sprite>

    当没有给出泛型类型参数时,泛型类型隐式地有一个Object类型参数,因此List实际上是List<Object>。尝试将对象列表附加到精灵列表时,对象列表存储的对象可能与Sprite不兼容,无法添加到精灵列表中。因此发出了警告