让我说我有
class Person {
String Age;
String Name;
}
Class Employee {
int Salary;
String Name;
}
我在列表中有这些类的各种实例。
我创建了2个单独的函数,它接受List<Person>
和List<Employee>
并显示内容。
但我想创建一个通用函数,它接受任何对象的List并执行显示部分。
请帮帮我
由于 晴天
答案 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();
}
}
}