具有不同对象的列表

时间:2013-04-03 12:24:38

标签: java

让我说我有

class Person {
    String Age;
    String Name;
}

Class Employee  {
    int Salary;
    String Name;
}

我在列表中有这些类的各种实例。 我创建了2个单独的函数,它接受List<Person>List<Employee>并显示内容。 但我想创建一个通用函数,它接受任何对象的List并执行显示部分。

请帮帮我

由于 晴天

3 个答案:

答案 0 :(得分:10)

最简单的解决方案是让Employee继承自Person。这很自然,因为很可能是员工 一个人。它们甚至共享一些属性,例如Name(您已在代码中使用过)和Age

class Person {
    String Age;
    String Name;
}

class Employee  extends Person {
    int Salary;
    // String Name; not needed anymore, inherited from Person
}

然后,只需要一个人员列表List<Person>即可存储两种对象类型。

如果仍然因任何原因需要将它们分开,可以添加一个公共父类或接口。理想情况下,将必要的方法(如显示)添加到界面中,让类实现它们:

interface Human {
   void showMe();
}

class Person implements Human {
    String Age;
    String Name;

    public void showMe() { System.out.println("I am a Person!");  }
}

class Employee implements Human {
    int Salary;
    String Name;

    public void showMe() { System.out.println("I am an Employee!");  }
}

然后,您可以使用Human列表来存储两种对象类型。迭代变得非常简单:

List<Human> humanList = new ArrayList<>();
// ... Populate the list with Persons and Employees

for(Human human : humanList) {
    human.showMe();
}

答案 1 :(得分:0)

我应该让Employee扩展Person,这样你就可以有一个通用函数来显示。

另一种方法是使用具有相同显示功能但具有两种不同实现的Person和Employee的公共接口。

答案 2 :(得分:0)

我还没有测试过这样的事情:

public interface MyInterface{
public void display();
}

class Person implments MyInterface{

String Age;
String Name;

@Override
public void display(){
   //Logic to print the data
}
}

Class Employee  implments MyInterface{
int Salary;
String Name;
@Override
public void display(){
   //Logic to print the data
}
}

public class MyTest{

public static void main(String[] args){

  List<MyInterface> myList = new ArrayList<MyInterface>();

    MyInterface p = new Person();
    MyInterface e = new Person();
    myList.add(p);
myList.add(e);
printMyList(myList);

}

private void printMyList(  List<MyInterface> myList){
   for(MyInterface my:myList){
     my.display();
}
}
}