Java将对象添加到ArrayList错误
我是java编程新手,希望能得到一些帮助。我正在尝试将类Fish的对象添加到arraylist调用fishList中 例如,在我的主要工作中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
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));