2012-03-28 2 views
0

아래 코드에서 instanceof을 사용하여 저장소 유형을 알기를 원하지 않습니다. 형식을 가져 오는 유일한 방법입니까? 와일드 카드 RepositoryVet<?>을 사용하여 유형을 알 수 있습니까? 이렇게하면 많은 테스트를 할 수 있습니다. "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; 
    } 
} 

내 질문을 완료하려면 : 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는 {

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

을 무엇. – Alp

+0

'RepositoryVet' ('instanceof'를 사용하여 테스트 할 수있는)의 서브 클래스는'RepositoryVet'의 타입 매개 변수와 (직접적으로) 관련이 없습니다. –

+0

'repository' 서브 클래스를 사용하는 것이 더 일반적입니다. –

답변

1

글쎄, 당신은, 예를 유형을 대표하는 저장소에 속성을 사용할 수 RepositoryVet를 확장 enum. 그래도 테스트가 필요합니다.

그러나, 귀하의 경우, 상속은 더 나은 방법이 될 수 있습니다 : 방법 List<String> getTaillesUS()을 제공하는 공통 인터페이스를 생성 (또는 어쩌면 List<String> getTailles(TailesType tailesType)는 (여기서 TailesType 적어도 값 US)으로 열거 될 것이다

+0

이것은 해결책입니다. 대단히 감사합니다. – user1298799