2013-04-03 1 views
2

Disons que j'aiqui ont des objets différents

class Person { 
    String Age; 
    String Name; 
} 

Class Employee { 
    int Salary; 
    String Name; 
} 

J'ai diverses instances de ces classes qui sont dans une liste. J'ai créé 2 fonction séparée qui accepte List<Person> et List<Employee> et affiche le contenu. mais je veux créer une fonction générique qui accepte List de n'importe quel objet et fait la partie d'affichage.

S'il vous plaît aidez-moi

Merci Ensoleillé

+2

Qu'en est-il d'avoir des employés étend personne et en utilisant une liste unique de la personne? – Davz

Répondre

10

La solution la plus simple est de laisser Employee Hériter de Person. Ceci est naturel, car probablement un employé est une personne. Ils partagent même certains attributs, comme Name (que vous aviez déjà dans votre code) et Age.

class Person { 
    String Age; 
    String Name; 
} 

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

Ensuite, il suffit d'avoir une liste des personnes List<Person>, où vous pouvez stocker les deux types d'objets.

Si vous devez toujours les séparer pour une raison quelconque, vous pouvez ajouter une classe parent ou une interface commune. ajouter idéalement les méthodes nécessaires (comme l'affichage) dans l'interface et de laisser les classes les mettre en œuvre:

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!"); } 
} 

Vous pouvez alors utiliser une liste de Human s pour stocker les deux types d'objets. Itérer devient alors assez facile:

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

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

Je should'have fait étendre l'employé personne pour que vous puissiez avoir une fonction générique pour l'affichage. Un autre moyen pourrait être d'avoir une interface commune à la personne et à l'employé avec la même fonction d'affichage mais deux implémentations différentes.

0

Je ne l'ai pas testé, mais quelque chose comme ceci:

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(); 
} 
} 
} 
Questions connexes