2012-10-21 4 views
0

에서 추상 클래스를 반환 :나는 다음 할 노력하고있어 다수의 상속 클래스

abstract class G { 
    protected var = 0; 
} 

class G1 extends G { 
    var = 1; 
} 

class G2 extends G { 
    var = 2; 
} 

// This is where I'm having a problem 
public G method() { 
    switch(someVar) { 
     case x: 
      return new G1(); 
     case y: 
      return new G2(); 
    } 
} 
자바 내가 G1 또는 G2를 돌아 가야하는 방법 G.의 유형을 반환해야하는 방법을 불평

(이 둘 다 G를 확장합니까?) 그것은 아주 틀림없이 나는이 문제에 완전히 접근하고있는 것일 수도 있습니다 ...

고맙습니다.

+2

공장은 어떻습니까? –

답변

4

문제점은 상속과 관련이 없습니다. 스위치가 case x 또는 case y이 아닌 경우에는 예외를 throw하거나 G 유형의 값을 반환해야합니다. 예를 들어

: 당신의 switch-case 블록

public G method() { 
    switch(someVar) { 
     case x: 
      return new G1(); 
     case y: 
      return new G2(); 
     default: 
      // You can return null or a default instance of type G here as well. 
      throw new UnsupportedOperationException("cases other than x or y are not supported."); 
    } 
} 
+0

이제 이해가됩니다. 도와 줘서 고마워! – efnx

+0

@Chrome과 비슷하지만 instanceof가 아닌 case가 있습니다. –

0

추가 기본 옵션 : someVar 다음은 어떤 return 문이없는하지 x 또는 y 때문에 경우에 불평

 default: .... 

그것.

또는, 당신은 기본을 추가 할 수 있습니다 return statement in the end 예를 들어,

public G method() { 
    switch(someVar) { 
     case x: 
     return new G1(); 
     case y: 
     return new G2(); 
    } 
    return defaultValue; // return default 
    } 
+0

나쁜 생각은 절에 절대로 도달해서는 안됩니다. –

+0

@RomanC : 그게 무슨 소리 야? 여러 표를 가진 받아 들여진 응답조차 동일한 것을 가지고있다. –

+0

아무데도 기본이 없습니다. –

관련 문제