2014-06-17 2 views
1

Supposons que j'ai des méthodes similaires qui font presque la même chose Comment puis-je en faire une méthode qui interrogera des données différentes. Ici, seules les données d'interrogation de dataManager sont différentes et obtiennent différentes listes d'objets pour l'itération.Faire une méthode commune pour différentes requêtes de données

private void method1(ClassA classA){ 
    List<One> one = dataManager.getOne(classA.param1); 
    if (one != null){ 
     //iterate data here... 
     for (int i = 0; i < one.size(); i++) 
     { 
      one.get(i).getAttributeOne(); 
      one.get(i).getAttributeTwo(); 
     } 
    }else{ 
    } 
} 

private void method2(ClassA classA){ 
    List<Two> two = dataManager.getTwo(classA.param1); 
    if (two != null){ 
     //iterate data here... 
    }else{ 
    } 
} 
+1

1. Comment sont liées les classes 'One' et' Two'? Sont-ils tous les deux, par exemple, l'extension de la même classe abstraite? Ou sont-ils des classes sans rapport? 2. Pouvez-vous déterminer quelle classe vous récupérez en fonction de 'classA.param1? –

+0

ils ne sont pas liés. mais ce sont des entités JPA. – Swarne27

+1

@Swarnajith est la partie 'itérer données ici ...' exactement la même chose? – Scis

Répondre

2

Est-ce que l'appel à dataManager.get() dans la méthode d'appel, et utiliser les médicaments génériques pour traiter les différents types de liste.

private <T> void method1(ClassA classA, List<T> myList){ 
    if (myList != null){ 
     //iterate data here... 
    }else{ 
    } 
} 

// Calling code 
method1(myClassA, dataManager.getOne(myClassA.param1)); 
method1(myClassA, dataManager.getTwo(myClassA.param1)); 

Voici un exemple compilable qui ressemble à ce que vous essayez de résoudre.

import java.util.*; 

public class Iterate{ 
    private <T> void method1(int classA, List<T> L){ 
     for (T t: L) { 
      System.out.println(t); 
     } 
    } 
    public static void main(String[] args) { 
     List<Integer> iList = new ArrayList<Integer>(); 
     List<String> sList = new ArrayList<String>(); 
     new Iterate().method1(1, iList); 
     new Iterate().method1(1, sList); 
    } 
} 
+0

+1 Y a-t-il une possibilité que nous en fassions une interface? – Swarne27

+0

@Swarnajith, Vous devrez être plus précis, mais la réponse générale est que oui, vous pouvez faire une interface Java générique. – merlin2011

+0

que diriez-vous de faire une interface qui implémente l'entité JPA (un, deux etc.) – Swarne27

Questions connexes