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 ....
Was tun. Du meinst mit Wildcard-Objekt? Eine Superklasse? Und was ist falsch mit instanceof? – Alp
Unterklassen von 'RepositoryVet' (was Sie für die Verwendung von' instanceof' testen können) sind nicht (direkt) mit dem Typparameter von 'RepositoryVet' verbunden –
Es wäre besser, die Unterklasse 'repository' als generischen Typ zu haben, für den das im Allgemeinen funktioniert, vielleicht? –