在下面的代码中,我不想使用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
的枚举)的通用接口)。