2012-03-28 10 views
0

Im folgenden Code möchte ich instanceof nicht verwenden, um den Typ des Repositorys zu kennen. Ist es der einzige Weg, um den Typ zu bekommen? Ist es möglich, den Typ mit dem Platzhalter RepositoryVet<?> zu kennen? Das würde mir helfen, viele Tests zu machen.Typ eines Platzhalterobjekts ohne Verwendung von "instanceof"

public ArrayList<String> rechercherTabTailles(String sexe,String SI,RepositoryVet<?> repository) { 
    ArrayList<String> tabTailles; 
    repository.Open(); 
    repository.rechercherspin(sexe); 
    if (SI.compareTo("US") == 0) { 
     if (repository instanceof ChaussureRepository) 
      tabTailles= ((ChaussureRepository) repository).taillesUS; 
     if (repository instanceof ChemiseRepository) 
      tabTailles= ((ChemiseRepository) repository).taillesUS; 
    } 
} 

Auf meine Frage vervollständigen: RepositoryVet ist bereits ein Abstract wie folgt definiert:

public abstract class RepositoryVet implementiert IRepositoryVet {

public ArrayList<String> taillesEU; 
public ArrayList<String> taillesUS; 
public ArrayList<String> taillesUK; 
public ArrayList<String> taillesIT; 
public ArrayList<String> taillesJP; 
public ArrayList<String> taillescm; 
public ArrayList<String> taillesinch; 

etc .... }

Und "ChaussureRepository" ist eine Klasse, die RepositoryVet wie folgt erweitert:

public class ChaussureRepository erweitert RepositoryVet {

public ArrayList<String> taillesEU; 
public ArrayList<String> taillesUS; 
public ArrayList<String> taillesUK; 
public ArrayList<String> taillesIT; 
public ArrayList<String> taillesJP; 
public ArrayList<String> taillescm; 
public ArrayList<String> taillesinch; 

etc ....

+1

Was tun. Du meinst mit Wildcard-Objekt? Eine Superklasse? Und was ist falsch mit instanceof? – Alp

+0

Unterklassen von 'RepositoryVet' (was Sie für die Verwendung von' instanceof' testen können) sind nicht (direkt) mit dem Typparameter von 'RepositoryVet' verbunden –

+0

Es wäre besser, die Unterklasse 'repository' als generischen Typ zu haben, für den das im Allgemeinen funktioniert, vielleicht? –

Antwort

1

Nun, Sie eine Immobilie im Repository verwenden könnte den Typ zu repräsentieren, z.B. ein enum. Sie würden dennoch einige Tests benötigen.

jedoch in Ihrem Fall, Vererbung könnte die bessere Lösung sein: eine gemeinsame Schnittstelle erstellen, die eine Methode bietet List<String> getTaillesUS() (oder vielleicht List<String> getTailles(TailesType tailesType) (wo TailesType würde eine Enumeration mit mindestens dem Wert US) seine

+0

Dies ist die Lösung. Vielen Dank – user1298799

Verwandte Themen