在类中访问ArrayList的变量

时间:2014-12-26 14:47:26

标签: java class arraylist getter

Task描述的是包含变量的业务任务:日期,描述,任务完成所需的总小时数以及任务的所有者。

为所有名为 tasks 的任务创建ArrayList。问题是任务可以有多个所有者,这意味着创建一个名为owner的变量不会起作用,所以我所做的就是创建了另一个名为TaskOwner的类并将该类实现为{ {1}}在ArrayList类中命名 taskOwner

现在问题是:您应该能够列出特定所有者的任务:这意味着您需要将所有者与您在键盘上输入的名称进行比较。

问题在于以下几行代码:

Task

我似乎无法访问类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)); } 中名为 name 的变量,即使我已经为所需的一切创建了getter,所以任何人都可以知道我应该如何能够访问这些信息?

我得到的错误信息是:

  

对于类型ArrayList

,方法getName()未定义

3 个答案:

答案 0 :(得分:2)

getTaskOwner似乎返回ArrayList类型的对象,而不是TaskOwner(错误消息指示的内容)。换句话说,它返回一个所有者列表。要调用getName()方法,您需要遍历此列表,并在与TaskOwner实例对应的每个元素上调用该方法。

System.out.println("What name of owner do you want to list tasks for: ");
String nameOfOwner = keyboard.nextLine();

for(int i = 0; i < tasks.size(); i++) {
    List<TaskOwner> owners = tasks.get(i).getTaskOwner();
    for(TaskOwner owner : owners) {
       if (nameOfOwner.toLowerCase().equals(owner.getName().toLowerCase())) {
           System.out.println(tasks.get(i));
           break;
       }
    }
}

答案 1 :(得分:0)

这将返回一个ArrayList:

tasks.get(1).getTaskOwner();

因此,您需要在其上调用数组列表方法,例如contains(...)

if (tasks.get(1).getTaskOwner().contains(nameOfOwner.toLowerCase())) {

答案 2 :(得分:0)

正如其他答案所指出的,问题是你在getName()上调用ArrayList<>而不是在ArrayList中调用对象。这样做的正确方法是遍历所有任务,然后为每个任务循环遍历其所有者。这是一段示例代码,假设所有者名称存储在变量nameOfOwner

for(Task task: tasks) {
  for(TaskOwner owner: tasks.getTaskOwner) {
     if (nameOfOwner.toLowerCase().equals(owner.getName().toLowerCase())) {
         System.out.println(task);
         break;
     }
  }
}

如果您还在类TaskOwner中重载了equals方法以对所有者的名称进行字符串匹配,则可以使用Arraylist.contains()方法。但是,您需要从用户输入中创建一个TaskOwner对象。

如果您打算执行任务和所有者查找,则还应考虑使用HashMap。对于直接查找,这将为您提供比ArrayList<>更好的性能。