2011-12-20 102 views
1

我只是在我的知识ArrayLists和有问题。ArrayList上的方法

我有4个类,一个人超类,员工子类,学生子类和员工的经理子类。

我不明白的是我如何使用方法m.setBonus上的人ArrayList。我知道我可以将对象分割成单独的数组,但我不确定这是否是答案。

我目前在Manager m : manager部件上出现错误,因为我没有提及管理员。

我现在在我的测试类

public static void main(String[] args){ 

ArrayList<Person> people = new ArrayList<Person>(); 

people.add(new Employee("Tom", 4000, 1990, 3, 10)); 
people.add(new Pupil("Dick", "Comp Sci")); 
people.add(new Employee("Harry", 4000, 1990, 3, 10)); 
people.add(new Manager ("Dan", 5000, 1990, 10, 1)); 

for (Manager m : manager) 
{ 
    m.setBonus(5000); 
} 

for (Person p : people){ 

    System.out.println(p.getDetails()); 
} 

} 

} 

我很抱歉,如果这是一个非常简单的事情,此代码。我在网上找不到任何东西。

干杯

回答

2

管理器arrayList不存在,而是在您现有的Person循环中进行检查。

public static void main(String[] args) { 
    ArrayList<Person> people = new ArrayList<Person>(); 

    people.add(new Employee("Tom", 4000, 1990, 3, 10)); 
    people.add(new Pupil("Dick", "Comp Sci")); 
    people.add(new Employee("Harry", 4000, 1990, 3, 10)); 
    people.add(new Manager ("Dan", 5000, 1990, 10, 1)); 

    // manager arrayList does not exist 
    //for (Manager m : manager) 
    //{ 
    // m.setBonus(5000); 
    //} 


    for (Person p : people){ 
     //Do this instead 
     if (p instanceof Manager) { 
      ((Manager) p).setBonus(5000); 
     } 

     System.out.println(p.getDetails()); 
    } 
} 
4

你从来没有申报管理器的列表称为manager所以它不知道该怎么用它做。

你需要做这样的事情:

for (Person p : people) 
{ 
    if (p instanceof Manager) { 
     ((Manager)p).setBonus(5000); 
    } 
} 

这将检查类p,以确认是否是子类经理或没有。

+0

非常感谢您,我将会阅读本书的instanceof部分! :) – EmberZ 2011-12-20 22:31:38

+3

您可能需要将该引用转换为“经理”实例 - 我怀疑“瞳孔”正在获得奖励。 – 2011-12-20 22:32:21

+1

这是一个解决方案,也许是原始海报设置问题的唯一解决方案,但每当我看到大量使用instanceof时,我担心整体设计可能会被破坏,并且可能会有更好的方法解决潜在的问题。 – 2011-12-20 22:32:40