我正在开发基于文本的RPG。在其中一个类中,有一个ArrayList处理保存和加载游戏。 ArrayList中既有整数也有字符串。

这是一个字符串:saveGame.add(p.getName());
这是一个整数:saveGame.add(p.getCurrLoc());

向列表中添加元素的每个变量都会收到如下警告:


  D:\ Backup \ RPG \ src \ rpg \ Player.java:86:警告:[unchecked]未选中
  调用add(E)作为原始类型ArrayList的成员
          getInventory()。add(item);其中E是类型变量:
      E扩展在ArrayList类中声明的Object


码:

public class Data {

private ArrayList saveGame;

//Sparar en ny rad i sparfilen
public void writeData(String in) {

    try {
        FileWriter out = new FileWriter("Savegame.txt", true);
        out.write(in + "\n");
        out.close();
    } catch (IOException ex) {
        Logger.getLogger(Data.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void save(Player p) {
    clearData();


    saveGame = new ArrayList();
    saveGame.add(p.getName());
    saveGame.add(p.getCurrLoc());
    saveGame.add(p.getStrength());
    saveGame.add(p.getConstitution());
    saveGame.add(p.getDexterity());
    saveGame.add(p.getHitpoints());
    saveGame.add(p.getLevel());
    saveGame.add(p.getxP());
    saveGame.add(p.getxPToLvlUp());
    saveGame.add(p.getArmorClass());
    saveGame.add(p.getNrOfPotions());
    saveGame.add(p.getEqWeapon().getName());


    for(Object element : p.getInventory()) {
        if(element instanceof Weapon) {
            saveGame.add(((Weapon) element).getName());
        } else if(element instanceof Item) {
            saveGame.add(((Item) element).getName());
        } else if(element instanceof Armor) {
            saveGame.add(((Armor) element).getName());
        }
    }

    for(Object element : saveGame) {
        writeData(element.toString());
    }
}

最佳答案

首先,这是一个警告,而不是错误。您仍然可以在此状态下运行代码。它只是打开了许多潜在问题的大门。

基本上,应该定义列表,以便知道每个元素是什么类型。这是使用泛型完成的。

因此,您可以将列表声明为字符串列表,如下所示:

ArrayList<String> saveGame = new ArrayList<String>();


这意味着您只能将字符串添加到列表中。但是,这也意味着getter方法将始终返回字符串,因此不需要强制转换。

关于java - 收到编译错误:警告:[未经检查]未检查对add(E)作为原始类型ArrayList成员的调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40576134/

10-11 05:12
查看更多