我已经阅读了很多关于xlint的消息来源,这是一个不安全的操作内容,而且很多内容都说了一些:
你可能用
初始化了你的arraylistArraylist x = new Arraylist();
相反,做,
List<String> x = new ArrayList<String>();
这一切都很好,花花公子,但在这种情况下,这根本不能帮助我。在我的项目中,我试图制作一个回合制的游戏,而且我有一个Commander类,它有一个单位和建筑物的arraylist。单位是单独的对象,带有子类。构造子类时,Commander对象是一个参数,这就是我使用它的原因,我认为这很好吗?问题在于:
public void buyUnit(int u)
{
if (u < 1 || u > 23)
{
if (u == 1)
this.getUnits().add(new Grunt(this));
if (u == 2)
this.getUnits().add(new Rifleman(this));
if (u == 3)
this.getUnits().add(new Scout(this));
if (u == 4)
this.getUnits().add(new Mortar(this));
if (u == 5)
this.getUnits().add(new FlakTrooper(this));
if (u == 6)
this.getUnits().add(new RPG(this));
if (u == 7)
this.getUnits().add(new Sniper(this));
if (u == 8)
this.getUnits().add(new Minigunner(this));
if (u == 9)
this.getUnits().add(new Humvee(this));
if (u == 10)
this.getUnits().add(new Tank(this));
if (u == 11)
this.getUnits().add(new Artillery(this));
if (u == 12)
this.getUnits().add(new MissileBattery(this));
if (u == 13)
this.getUnits().add(new GattlingGun(this));
if (u == 14)
this.getUnits().add(new IFV(this));
if (u == 15)
this.getUnits().add(new TankBuster(this));
if (u == 16)
this.getUnits().add(new Flamethrower(this));
if (u == 17)
this.getUnits().add(new Fighter(this));
if (u == 18)
this.getUnits().add(new Bomber(this));
if (u == 19)
this.getUnits().add(new Gunship(this));
if (u == 20)
this.getUnits().add(new Gunner(this));
if (u == 21)
this.getUnits().add(new Jet(this));
if (u == 22)
this.getUnits().add(new Chopper(this));
if (u == 23)
this.getUnits().add(new Harrier(this));
this.loseBalance(units.get(units.size() - 1).getCost());
}
我确信有更好的方法可以做到这一点,而不是使用整数参数,但我更喜欢在保持这种情况下解决问题的方法。使用loseBalance(int b)方法的最后一行很好,因为当我发表评论时我得到了错误。那么问题是什么?
好的Marco13指出了有关getUnits()方法的一些内容,即:
public ArrayList getUnits()
{
return units;
}
只返回单位的ArrayList。我仍然不明白为什么它现在有效,但我改变了:
this.getUnits(). ...
到
units. ...
我想当我能够在课堂上访问它时,尝试首先返回Arraylist是愚蠢的,但这仍然无法解释为什么当我尝试返回ecact时出现错误相同的数组,但只能使用方法而不是引用本身。
答案 0 :(得分:2)
您使用了生成警告的ArrayList
原始类型。
切勿将参数化类型与原始类型混合使用。
public ArrayList getUnits()
{
return units;
}
答案 1 :(得分:0)
你不是在问,但如果你有这样的限制:
if (u < 1 || u > 23)
{
if (u == 1)
this.getUnits().add(new Grunt(this));
if (u == 2)
this.getUnits().add(new Rifleman(this));
}
然后内部if将永远不会为真,因为为了测试内部ifs
,你必须小于1或大于23。
它应该是
if (u >= 1 && u <= 23)
这是第一件事,第二件事,使用
if(u==1){
//code
}else if(u==2) {
//code
}
而不是
if(u==1){}
if(u==2){}
因为即使已经匹配,您也会检查他们中的每个人。 在你的情况下,我建议使用
switch(u)
{
case 1:
//code
break;
case 2:
//code
break;
case 3:
//code
break;
.
.
.
default:
}
没有if (u < 1 || u > 23)