【问题标题】:Calling a method on every created object在每个创建的对象上调用方法
【发布时间】:2018-03-28 05:25:40
【问题描述】:

我一直想知道有没有办法为一个特定类的每个对象调用方法?

假设我有一堂课:

public class Employee {
private double salary;
private boolean hired;

public double getSalary() {return salary;}
public double setSalary(double x) {salary=x;}

public boolean getHired() {return hired;}
public boolean setHired(boolean check) {hired=check;}

}

然后我声明另一个扩展 Employee 的类,例如老板(因为老板也是员工对吧)

所以他从 Employee 继承了“gets”和“sets”,也有可能解雇员工:

public class Boss extends Employee {

public void fireTheGuy(Employee unluckyYou) {
    boolean temp;
    temp=false;
    unluckyYou.setHired(temp);
    unluckyYou.setSalary(0.0);
}

这允许在 main:

public static void main(String args[])
{
     Employee worker1 = new Employee();
     Employee worker2 = new Employee();
     Boss slacker = new Boss();
     slacker.fireTheGuy(worker1);
     slacker.fireTheGuy(worker2);
}

但是如果我有大约 100 名员工,而老板想要全部解雇他们怎么办?应该如何调用这个方法(这甚至可以通过某种循环来实现吗?)

【问题讨论】:

  • 这就是可迭代数据结构的用途。将您的员工放入一个数组或集合中,并在循环中对其进行迭代,然后在循环中调用函数。
  • 你可能需要考虑将对象放在一个数组中,然后你可以循环它们

标签: java class object methods instance


【解决方案1】:

您可以让所有员工在一个共同的staticList 中注册自己。然后当老板被告知要解雇所有人时,他只是按照名单行事。

static List<Employee> allEmployees = new ArrayList<>();

public class Employee {
    private double salary;
    private boolean hired;

    public Employee() {
        // All employees must register themselves in the allEmployees list.
        allEmployees.add(this);
    }

    public double getSalary() {return salary;}
    public double setSalary(double x) {salary=x;}

    public boolean getHired() {return hired;}
    public boolean setHired(boolean check) {hired=check;}

}

public class Boss extends Employee {

    public void fireTheGuy(Employee unluckyYou) {
        unluckyYou.setHired(false);
        unluckyYou.setSalary(0.0);
    }

    public void fireThese(Iterable<Employee> fireThem) {
        for ( Employee e : fireThem ) {
            fireTheGuy(e);
        }
    }

    public void fireEveryone() {
        fireThese(allEmployees);
    }
}

【讨论】:

  • 这看起来像,如果我想解雇一个特定部门(私人字符串部门)的所有员工,那么我只需要添加简单的 if(Department="blahblah")开火吗?
  • @Doomsay - 我可能会添加一个fireTheseGuys(Iterable&lt;Employee&gt; fireThem) 并以明显的方式实现它。然后你可以传递任何List/Set/...你喜欢的,他们都会被解雇。附言我只是在答案中这样做了。
【解决方案2】:

这是你可以做什么的代码示例

List<Employee> employees=new ArrayList<Employee>();

employees.add(worker1);
employees.add(worker2);

for(Employee worker:employees){
    slacker.fireTheGuy(worker);
}

但就像 cmets 中提到的那样,您应该尝试理解此示例背后的所有概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多