【问题标题】:Java Add Object to ArrayList errorJava将对象添加到ArrayList错误
【发布时间】:2013-10-30 21:01:52
【问题描述】:

我是 Java 编码新手,希望得到一些帮助。我正在尝试将 Fish 类的对象添加到 arraylist 调用 fishList

在我的主要例子中

    public static void main(String[] args) {

    Fish f1 = new Fish("Nemo");}

在我的班级和构造函数中,我有

public class Fish {
protected static String name;
protected static int number;
protected static List<Fish> fistList = new ArrayList<Fish>();


public Fish(String in){
name = in;
number = 15;
fishList.add(name, number);
}

但我得到一个错误“没有找到适合 add(string, int) 的方法 方法 List.add(int, Fish) 不适用 (实参String无法通过方法调用转换为int) 方法 List.add(Fish) 不适用 (实际上形式参数列表的长度不同)

如何正确地将对象添加到数组列表中?

【问题讨论】:

    标签: java class object arraylist add


    【解决方案1】:

    首先namenumber 不应该是static(除非您希望所有的鱼都具有相同的名称/编号,但创建多个该类的实例将浪费资源)!

    其次,改变:

    fishList.add(name, number);
    

    收件人:

    fishList.add(this);
    

    fishList 可以保存对 Fish 类型对象的引用。如果您尝试添加“名称,编号”Java 不知道您的意思是鱼:-)

    this 指向当前正在构造函数中创建的对象。

    【讨论】:

    • 非常感谢您帮助我解决静态问题,如果我说实话我遇到了一个错误并认为这可能会有所帮助,我已经发布了一个关于它的新问题!给你打勾发现静态的东西。
    【解决方案2】:

    您需要将fishList.add(name, number); 更改为fishList.add(this);

    除非需要,否则不要使用静态修饰符创建对象属性。 static 修饰符表示属性属于类。如果 Fish 的任何一个对象修改这些属性将被更改为最后修改的值。

    protected static String name;
    protected static int number;
    

    请像这样修改 ypur pojo。

    class Fish {
    
        private String name;
        private int number;
    
        public Fish(String name, int number) {
            super();
            this.name = name;
            this.number = number;
        }
    
        @Override
        public String toString() {
            return "Fish [name=" + name + ", number=" + number + "]";
        }
    
    }
    
    public static void main(String[] args) {
    
       List<Fish> fistList = new ArrayList<Fish>();
       fistList.add(new Fish("name1",1));
       fistList.add(new Fish("name1",2));
       fistList.add(new Fish("name1",3));
       fistList.add(new Fish("name1",4));
       fistList.add(new Fish("name1",5));
       fistList.add(new Fish("name1",6));
       for (Fish fish : fistList) {
          System.out.println(fish);
       }
    
       System.out.println(fistList.get(0)); // getting the first Fish
       System.out.println(fistList.get(1)); // getting the second Fish
    
    }
    

    【讨论】:

    • 感谢帮助的朋友!
    • @SerDavos 您需要将 17 条鱼添加到 fishList。然后只有你可以通过索引 16 访问 16 个元素。 fishList.get(16);注意:列表基于 0 索引。
    • @SerDavos 请注意,您的代码很可能仍然无法像您想象的那样工作 - 请参阅我的回答为什么
    【解决方案3】:

    您定义的 ArrayList 被参数化为接受 Fish 对象,在其中放置一个不是 Fish 的对象将导致错误。此外,正如其他答案所提到的,您使用了错误形式的 ArrayList.add 方法。

    fishList.add(name, number);
    

    应该是,

    fishList.add(this);
    

    【讨论】:

      【解决方案4】:

      您不能将两个参数传递给列表的添加方法。

      像下面这样传递

      fishList.add(this);
      

      同时更正列表声明中fistListfishList 的拼写错误

      【讨论】:

        【解决方案5】:

        因为您使用了泛型并声明了 fishList 的 with 。所以你只被允许 添加鱼类型的列表项。不允许使用其他类型。这是泛型提供的编译时类型安全。 List 的 add() 重载如下。 add(T) 和 add(int,T) 其中第一个参数是索引,第二个是任何类型。但你是说 add(String,int) 在 java.util.List 中不存在。

        除非需要,否则永远不会推荐静态字段。因为它们显示出对性能的巨大影响。所以删除属性声明中的静态。

        如果属性“数字”可能采用不同的值,则不要在其构造函数中分配默认值 15,而是这样做。

        private String name;
        private int number;
        
        public Fish(String name,int number){
        this.name = name;
        this.number = number;
        }
        

        将上述声明firstList.add(name,number);替换为

        firstList.add(new Fish("abc",10));
        

        【讨论】:

          【解决方案6】:

          给定的名称和编号是字符串格式,但是您在泛型中指定了 Fish 类,因此您必须在 List 中仅添加 Fish 对象

          fishList.add(this);

          【讨论】:

            猜你喜欢
            • 2013-10-29
            • 2013-03-25
            • 1970-01-01
            • 1970-01-01
            • 2017-12-12
            • 2013-11-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多