2

我是 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)不适用(实际形式参数列表的长度不同)

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

4

6 回答 6

3

你需要 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

}
于 2013-10-22T06:16:25.087 回答
3

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

其次,改变:

fishList.add(name, number);

到:

fishList.add(this);

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

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

于 2013-10-22T06:16:59.843 回答
1

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

fishList.add(name, number);

应该,

fishList.add(this);
于 2013-10-22T06:19:15.583 回答
0

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

像下面这样传递

fishList.add(this);

还更正列表声明中fistListto的拼写错误fishList

于 2013-10-22T06:20:25.573 回答
0

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

fishList.add(this);

于 2013-10-22T06:22:56.210 回答
0

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

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

如果属性“数字”可能采用不同的值,则不要在其构造函数中分配默认值 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));
于 2013-10-22T08:01:18.863 回答