不使用“instanceof”的通配符对象的类型

时间:2012-03-28 17:14:11

标签: java

在下面的代码中,我不想使用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;

等...

1 个答案:

答案 0 :(得分:1)

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

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