在下面的代码中,我不想使用instanceof来了解存储库的类型。
这是获取类型的唯一方法吗?是否可以使用通配符RepositoryVet<?>知道de type?这将节省我大量的测试。

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;
    }
}


完成我的问题:
RepositoryVet已经是一个定义如下的abstractClass:

公共抽象类RepositoryVet实现了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;


等等....
}

而且“ ChaussureRepository”是一个扩展RepositoryVet的类,如下所示:

公共类ChaussureRepository扩展了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;


等等....

最佳答案

好吧,您可以在存储库中使用属性来表示类型,例如一个枚举。
您仍然需要一些测试。

但是,在您的情况下,继承可能是更好的方法:创建一个提供方法List<String> getTaillesUS()(或者可能是List<String> getTailles(TailesType tailesType)(其中TailesType是至少具有值US的枚举)的通用接口)。

08-17 10:27