Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将对象添加到ArrayList错误_Java_Class_Object_Arraylist_Add - Fatal编程技术网

Java将对象添加到ArrayList错误

Java将对象添加到ArrayList错误,java,class,object,arraylist,add,Java,Class,Object,Arraylist,Add,我是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

我是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);
}
公共级鱼类{
受保护的静态字符串名称;
受保护的静态整数;
受保护的静态列表fistList=new ArrayList();
公共鱼(串入){
name=in;
数字=15;
添加(名称、编号);
}
但是我得到一个错误“没有找到合适的add(string,int)方法” 方法列表。添加(int,Fish)不适用 (无法通过方法调用转换将实际参数字符串转换为int) 方法列表。添加(Fish)不适用 (正式参数列表的实际长度不同)


如何正确地将对象添加到arraylist?

您需要更改
鱼列表。添加(名称、编号);
鱼列表。添加(此);

除非需要,否则不要使用静态修饰符创建对象属性。静态修饰符意味着该属性属于类。如果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

}
类鱼{
私有字符串名称;
私有整数;
公共鱼(字符串名称、整数){
超级();
this.name=名称;
这个数字=数字;
}
@凌驾
公共字符串toString(){
返回“Fish[name=“+name+”,number=“+number+””;
}
}
公共静态void main(字符串[]args){
List fistList=新建ArrayList();
添加(新鱼(“名称1”,1));
添加(新鱼(“名称1”,2));
添加(新鱼(“名称1”,3));
添加(新鱼(“名称1”,4));
添加(新鱼(“名称1”,5));
添加(新鱼(“名称1”,6));
对于(鱼:fistList){
系统输出打印(fish);
}
System.out.println(fistList.get(0));//获取第一条鱼
System.out.println(fistList.get(1));//获取第二条鱼
}

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

第二,改变:

fishList.add(name, number);
致:

fishList可以保存对Fish类型对象的引用。如果您尝试添加“name,number”,Java不知道您指的是鱼:-)


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

您定义的ArrayList已参数化以接受Fish对象,将非Fish对象放置在其中将导致错误。此外,如其他答案所述,您使用的ArrayList.add方法的格式错误

fishList.add(name, number);
应该是,

fishList.add(this);

不能传递两个参数来添加列表的方法

像下面这样传递这个

fishList.add(this);

另外,在列表声明中将
fistList
的键入错误更正为
fishList
给定的名称和编号为字符串格式,但您在泛型中指定了Fish类,因此您必须仅在列表中添加Fish对象

添加(此)


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

除非需要静态字段,否则不会重新对其进行排序。因为它们对性能有很大影响。所以请在属性声明中删除静态字段

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

private String name;
private int number;

public Fish(String name,int number){
this.name = name;
this.number = number;
}
将上述语句
firstList.添加(姓名、编号);

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

感谢好友的帮助!@SerDavos您需要将17条鱼添加到fishList中。然后只有您才能通过索引16访问16元素。fishList.get(16);注意:列表是基于索引的。@SerDavos请注意,您的代码很可能仍然无法按您认为的那样工作-请参阅我的答案。如果我是诚实的,我遇到了一个错误,并认为这可能会有所帮助,我已经发布了一个新问题!为您指出静态内容打了勾。
firstList.add(new Fish("abc",10));