2011-07-29 2 views
3
WebService 나는 서로 다른 값을 가진 다음 enum을 선언 한 WebService이라는 공통 superlass를 가지고있다.

Java enum 상속 : Enum의 toString() 메소드를 공통 수퍼 클래스/열거 형으로 추출 할 수 있습니까?

public class GeoPlacesService extends WebService { 

public enum RequestParam { 
    LOCATION, RADIUS, SENSOR, KEY; 

    @Override 
    public String toString() { 
     return super.toString().toLowerCase(); 
    } 
} 

public enum ResponseParam { 
    STATUS, LATITUDE, LONGITUDE, NAME; 

    @Override 
    public String toString() { 
     return super.toString().toLowerCase(); 
    } 
} 
} 

열거 형 toString() 메소드를 일반적인 것으로 추출 할 수 있습니까? 슈퍼 클래스/열거 형? 지금 당장은 각 열거 형에 대해 toString()을 8 번 복제해야합니다 ...

+2

열거 형 상수를 소문자로 표시 할 수 있습니다. 그렇다면 열거 형 상수를 어떻게 표시해야하는지, 그렇다면 toString()을 사용하지 않아도됩니다. –

+2

@ Peter Lawrey 나는 그것에 대해 생각하고 있었지만 Java 코딩 규칙에 위배되지 않습니까? (상수 여야합니다) – siamii

+0

그들은해야하지만 첫 번째 규칙은 다음과 같아야합니다. 당신이 가장 분명하고 단순하다고 믿는 것을하십시오. –

답변

2

, 당신은 열거 공통 클래스에서 상속 할 수 없습니다. 샘플 코드에서 보여주는 것보다 더 복잡한 작업을 수행하는 경우 열거 형을 사용하고 계산을 수행하는 정적 어딘가에 도우미 함수를 사용할 수 있습니다. 열거 형은 인터페이스를 구현할 수 있으므로 잠재적으로 복잡한 일반적인 toString을 처리 할 수 ​​있습니다.

+0

'WebServie'에서'toString' 메서드를 가진'Param'이라는 보호 된 인터페이스를 선언했습니다. 이것은 모든 enum에서 구현됩니다. 필자는 WebService에서 정적 인 보호 된'toString' 헬퍼 함수를 ​​써서'Param'을 취했다. – siamii

+0

그러면 모든 객체 (심지어 열거 형)에 toString 메서드가 있으므로 인터페이스가 필요하지 않으므로 간단히 재정의를 수행 할 수 있습니다. – aperkins

1

열거 형은 최종이며 아무 것도 상속 할 수 없습니다. 당신이 할 수있는 최선의 방법은 toString()을 override하고 일반적인 "to-stringer"구현에 위임하는 것입니다. 그래서 실제 구현을 계속해서 반복 할 필요가 없습니다. 당신에게 가능한 상속 모델을 enum이 없기 때문에

0

, 당신은 당신의 enum 클래스에서 아무것도를 확장 할 수 없습니다, 따라서 ..

다른 사람에 의해 언급 한 바와 같이
관련 문제