无法从方法返回arrayList

时间:2019-02-26 15:16:27

标签: java

因此,我正在自学Java,但还不是很出色,而是尝试着做游戏。我正在尝试从类方法中返回一个arraylist,但是它一直给我一个“不能被取消引用”的错误。这是来自称为“级别”的类的方法。它应该创建一个外星人列表,并将其返回到主游戏。我有一堆类可以扩展精灵以代表不同的敌人。所以外星人#扩展了精灵。

public ArrayList<Sprite> sendWave(){
    aliens = new ArrayList<Sprite>();
    aliens.add(new Alien1(100, 50, difficulty));
    // etc
    return aliens;
}

后来在绘制所有内容的板类中,我想阅读ArrayList。我目前有这个:

public void initAliens() {
    Levels level = new Levels();
    ArrayList<Sprite> aliens = new ArrayList<>();     
    aliens.addAll(level.sendWave()); 
    // blah blah
}

我也尝试过:

aliens = level.sendWave();

甚至只是通过执行以下操作单独测试该方法:

level.sendWave();

它总是给我“无法取消引用”错误。我真的不明白那是什么意思。什么int?我是否错误地返回了arraylist?

1 个答案:

答案 0 :(得分:1)

您似乎有一个int level;

一般模式是:

public List<Sprite> sendWave() {
    List<Sprite> aliens = new ArrayList<>();
    aliens.add(new Alien1(100, 50, difficulty));
    // etc
    return aliens;
}

List<Sprite> aliens = sendWave();
aliens.addAll(sendWave);

public void sendWave(List<Sprite> aliens) {
    aliens.add(new Alien1(100, 50, difficulty));
    // etc
}

List<Sprite> aliens = new ArrayList<>();
sendWave(aliens);
sendWave(aliens);

您确实在方法外定义了aliens,因此使用了某些字段。上面有一个本地独立变量aliens,不会干扰任何命名字段。

也许Thas是int aliens

更好的方法是使用局部变量,尽可能接近其用法。

以上,我还使用了更通用的List<Sprite>-实际上是一个接口列表。然后,我使用实现ArrayList创建一个实例。

Java具有许多接口,例如ListMapSet,并允许专门的实现类,例如LinkedListHashMapTreeSet。 / p>

使用上述额外的注意,将来无需更改许多代码即可更改实现。实际上,它是一种语言功能,能够为某些脚本语言所没有的某些用例提供最佳实现。

对于其他情况,我在您的代码中没有看到任何问题,可能是字段干扰了。