因此,我正在自学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?
答案 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具有许多接口,例如List
,Map
和Set
,并允许专门的实现类,例如LinkedList
,HashMap
和TreeSet
。 / p>
使用上述额外的注意,将来无需更改许多代码即可更改实现。实际上,它是一种语言功能,能够为某些脚本语言所没有的某些用例提供最佳实现。
对于其他情况,我在您的代码中没有看到任何问题,可能是字段干扰了。