2016-06-16 5 views
0

android에서 sugarORM을 사용하지 않는 사용자는 객체에 어떤 클래스 데이터 유형을 선택해야합니까? 예 :일부 조건에 따라 데이터 유형을 선택하십시오.

Class1 c; 
If(statuscode==1){ 
    c = new Class1(); 
}else if(statuscode==2){ 
    c = new Class2(); 
}else if(statuscode==3){ 
    c = new Class3(); 
} 

하지만이 경우 2와 3의 경우에 캐스팅 오류가 발생합니다. 어떻게 해결할 수 있습니까?

내가 안드로이드에 sugarORM을 사용하고

안드로이드

에 sugarORM을 알고 나는 몇 가지 조건에 따라 네 개의 테이블 중 하나에서 모든 행을 선택할 필요가 어디 상황을 가지고 사람들을 위해 상세

, 또는 다른 일을해야합니다. 이제

List<Table1> list = Table1.listAll(Table1.class); 
or 
Table1 t = new Table1(); 

, 나는 수신하고 텐트의 상태 코드를 기반으로, 내가 표 1, 표 2, 표 3 또는 표 4

수단을 사용할 필요가 예를 들어

는 나도

를 사용할 필요가
List<Table1> list = Table1.listAll(Table1.class); 
or 
List<Table2> list = Table2.listAll(Table2.class); 
or 
List<Table3> list = Table3.listAll(Table3.class); 
or 
List<Table4> list = Table4.listAll(Table4.class); 

어떻게하면됩니까?

는 내가 모든 행을 나열하거나 그 표 분명히

 List<Table1> list=null; 
     switch (statuscode){ //statuscode in Integer 1,2,3,4 
      case 1: 
       list = Table1.listAll(Table1.class); 
       break; 
      case 2: 
       list = Table2.listAll(Table2.class); 
       break; 
      case 3: 
       list = Table3.listAll(Table3.class); 
       break; 
     } 

그러나 사례 2와 사례 3 캐스트 오류를 ​​줄 것이다의 새로운 객체를 인스턴스화 할 필요가 어디에 내 코드 어디에서나 스위치 케이스를 사용하여, IS 시도 무엇

그래서이 유형의 문제에 대한 해결책은 무엇입니까?

+0

왜 '인터페이스'를 사용할 수 없습니까? –

+0

예. 인터페이스 'A'를 정의하고, 세 개의 클래스가'A'를 구현하고'c'를 다음과 같이'A'로 선언하도록하십시오 :'A c;' – AhmadWabbi

+0

Table이라는 클래스를 생성하십시오. 그런 다음 Table1,2,3이이를 구현하도록하십시오. –

답변

0

하나의 명백한 해결책은 기본 클래스를 사용하는 것입니다. 당신은

List<Object> list 

대신

List<Table1> list 

또는 무서운 웜뱃 제안 같은 것을 사용하는 4 개 클래스가 인터페이스를 구현하고 목록을 정의 할 때 그 인터페이스를 사용할 수 있습니다.

+0

시도해보고 알려 드리겠습니다. 그런 다음 –

관련 문제