java访问类内ArrayList的变量
类Task
描述企业的任务,其中包括变量:日期、描述、任务完成所需的总小时数,以及任务的所有者
为所有名为任务的任务创建一个ArrayList
。问题是一个任务可以有多个所有者,这意味着创建一个名为owner的变量是行不通的,所以我创建了另一个名为TaskOwner
的类,并在Task
类内将该类实现为一个名为taskOwner的ArrayList
类
现在问题来了:你应该能够列出特定所有者的任务:这意味着你需要将所有者与你在键盘上输入的名称进行比较
问题在于以下几行代码:
System.out.println("What name of owner do you want to list tasks for: ");
String nameOfOwner = keyboard.nextLine();
if (nameOfOwner.toLowerCase().equals(tasks.get(1).getTaskOwner().getName().toLowerCase())) {
System.out.println(tasks.get(1));
}
我似乎无法访问类TaskOwner
中名为name的变量,即使我已经为所有需要的内容创建了getter,那么有人知道我应该如何访问这些信息吗
我收到的错误信息是:
The method getName() is undefined for the type ArrayList
# 1 楼答案
getTaskOwner
似乎返回类型为ArrayList
而不是TaskOwner
的对象(错误消息表明了这一点)。换句话说,它返回一个所有者列表。要调用getName()
方法,需要循环这个列表,并在与TaskOwner
实例对应的每个元素上调用该方法# 2 楼答案
正如在其他答案中指出的,问题是您在
ArrayList<>
上调用getName()
,而不是在ArrayList中调用对象。正确的方法是循环所有任务,然后对每个任务循环它们的所有者。下面是一段示例代码,假设所有者名称存储在变量nameOfOwner
中:如果您还重载了类
TaskOwner
中的equals方法来对所有者的名称进行字符串匹配,那么您可以使用Arraylist.contains()
方法。但是,您需要从用户输入中创建一个TaskOwner
对象如果你的意图是做任务和所有者查找,你也应该考虑使用^ {CD7>}。对于直接查找,这将比
ArrayList<>
提供更好的性能# 3 楼答案
这将返回一个ArrayList:
因此,需要对其调用数组列表方法,例如
contains(...)