ArrayList<Person> 类型没有定义 addFriend(Person) 方法。

3

我有3个Java源代码文件。

  • Person.java(人类)
  • FriendsList.java(朋友列表)
  • MyFriends.java(我的朋友)

FriendsList包含一个对象类型为Person的数组列表,并包含一个添加新朋友到列表中的方法。

public class FriendsList{
    ArrayList<Person> friendsList = new ArrayList<Person>(100);
    // Constructor declaration of class
    public FriendsList(ArrayList<Person> friendsList){
            super();
            this.friendsList = friendsList;
    }    
    ...
    public void addFriend(Person friend){
            friendsList.add(friend);
    }
    ...
}

现在,在MyFriends.java中,我创建了一个新的对象数组列表,类型为Person,我声明了一个新的Person,并尝试使用方法addFriend(Person)将其添加到列表中,但是我遇到了一个错误"Method addFriend(Person) is undefined for the type ArrayList<Person>"

public class MyFriends{
    public void main(String[] args){
            ArrayList<Person> friendsList = new ArrayList<Person>(100);            
            Person f1 = new Person("Alice", "Anderson", "519-472-4910", "02", "19");
            friendsList.addFriend(f1);
    }
}

我尝试了FriendsList.java中定义的所有其他方法,但是我收到相同的错误信息。

我知道如果源文件在同一个文件夹中,使用另一个文件中的方法的语法是对象名称.方法名(a)

我做错了什么?

(对不起,如果我没有正确提问,这是我的第一个问题)


3
在你的MyFriends类中,friendsList没有被定义在任何地方,但错误信息清晰地显示它被定义为一个ArrayList<Person>。因此我们可以推断这绝对不是完整的代码。 - Michael
1
你有两个名为friendsList的变量,它们具有不同的类型,这对我们和你来说都很困惑。 - Louis Wasserman
抱歉,我编辑了问题以包括MyFriends类中friendsList的定义。尽管我在代码中有它。 - cruella devil
你真的需要一个完整的类来封装一个ArrayList吗? - OneCricketeer
@OneCricketeer 我只是按照我的作业要求做的。它要求使用所有这些不同的类 :) - cruella devil
2个回答

3
我猜你想实现以下操作:
public class MyFriends{
    public void main(String[] args){
        FriendsList friendsList = new FriendsList();            
        Person f1 = new Person("Alice", "Anderson", "519-472-4910", "02", "19");
        friendsList.addFriend(f1);
    }
}

你正在实例化一个 ArrayList<Person>,但你真正想要的是创建自己的 FriendsList 类的对象。


看起来你的 FriendsList 没有无参构造函数,因此你需要执行以下操作(实例化一个List of Person):

public class MyFriends{
    public void main(String[] args){
        FriendsList friendsList = new FriendsList(new ArrayList<Person>(100));            
        Person f1 = new Person("Alice", "Anderson", "519-472-4910", "02", "19");
        friendsList.addFriend(f1);
    }
}

然而,在我看来,您应该向您的FriendsList类添加一个无参构造函数,如下所示,以便我的第一个建议实际上可行(感谢@DavidConrad提供的提示):

public class FriendsList{
    ArrayList<Person> friendsList = new ArrayList<Person>(100);
    // Constructor declaration of class
    public FriendsList() {
    }  
    
    public FriendsList(ArrayList<Person> friendsList){
            this.friendsList.addAll(friendsList);
    }    
    ...
    public void addFriend(Person friend){
            friendsList.add(friend);
    }
    ...
}

非常感谢,现在我明白了。现在我收到一条消息:“构造函数friendsList()未定义”。我在FriendsList.java中有构造函数声明,如下所示:public FriendsList(ArrayList<Person> friendsList){ super(); this.friendsList = friendsList; } 我尝试在括号中添加ArrayList<Person> friendsList,如下所示:FriendsList friendsList = new FriendsList(ArrayList<Person> friendsList); - cruella devil
我希望这次翻译正确。我还在适应这个网站。 - cruella devil
1
@cruelladevil 现在从构造函数中删除 super(); 调用(Java 默认会这样做),我建议不要简单地接受从其他地方传递的列表;调用者可能会保留一个副本并在“你的背后”进行更改。相反,使用 this.friendsList.addAll(friendsList); 将它们从提供的列表复制到你的列表中。 - David Conrad
抱歉,@JoãoDias,上面的评论是给提问者的。我知道你是从问题中复制了那段代码。 - David Conrad
不用担心,@DavidConrad ;) 这些确实是很好的提示,我会进行调整以帮助OP和其他人。 - João Dias
显示剩余2条评论

2

您实际上并没有使用 FriendsList 类。MyFriends 应该是:

public class MyFriends{
    public void main(String[] args){
            FriendsList friendsList = new FriendsList();            
            Person f1 = new Person("Alice", "Anderson", "519-472-4910", "02", "19");
            friendsList.addFriend(f1);
    }
}

就是这样!我需要这一行代码 FriendsList friendsList = new FriendsList(new ArrayList<Person>(100));。非常感谢!如果没有这个,我会在谷歌上搜索几个小时。 - cruella devil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接