java - 出现编译错误: warning: [unchecked] unchecked call to add(E) as a member of the raw type ArrayList

标签 java arraylist compilation

我正在开发一个基于文本的角色扮演游戏。在其中一个类中有一个 ArrayList 来处理保存和加载游戏。 ArrayList 中有整数和字符串。

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

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

D:\Backup\RPG\src\rpg\Player.java:86: warning: [unchecked] unchecked call to add(E) as a member of the raw type ArrayList getInventory().add(item); where E is a type-variable: E extends Object declared in class ArrayList

代码:

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 - 出现编译错误: warning: [unchecked] unchecked call to add(E) as a member of the raw type ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576134/

相关文章:

c++ - 如何使用 OpenSSL 编译一个简单的程序?

java - 在 Java 中使用集合的正确方法?

asp.net - 如何解决asp网站初始加载速度慢的问题?

java - 将 drools 引导决策表编译成规则

java - CellStyle共享同一个堆地址apache poi

java - 通过 spring 显示多表 jasper 报告

java - 如何编写一个方法,将单词向后存储在从用户输入接收到的数组列表中,直到输入 "done"?

java - Android OpenGL 获取渲染结果为 Java Byte 数组

java - 使用 java 将图像拖放到 BOX-selenium 中

java - 在两个 anchor Pane 之间切换