2011-07-29 14 views
3

私は、共通のsuperlassと4種類のクラスがあり、それぞれが(異なる値で)それらの中で宣言、次の列挙型を持っているWebServiceと呼ばれる: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

enum定数を小文字にすることができますが、それがどのように表示されるべきであると感じる場合は、toString()は不要です。 –

+2

@Peter Lawrey私はそれについて考えていましたが、Javaコーディング規約に反していませんか? (定数は大文字にする必要があります) – siamii

+0

最初のルールはそうすべきです。あなたが信じていることは、最も明快で簡単です。 –

答えて

2

他の人が指摘したように、あなたは列挙型は、一般的なクラスから継承することはできません。あなたのサンプルコードに表示されているより複雑な何かをやっているなら、enumを取り込んで計算を行う静的なヘルパー関数をいくつか持つことができます。 Enumはインターフェースを実装することができるので、複雑な共通のtoStringを潜在的に処理することができます。

+0

私は、 'toString'メソッドを持つ' Param'と呼ばれる 'WebServie'で保護されたインターフェースを宣言しました。これはすべてのenumによって実装されます。また、WebServiceに静的に保護された 'toString'ヘルパー関数を書いて、' Param'を取得しました。 – siamii

+0

すべてのオブジェクト(Enumも)はtoStringメソッドを持っているので、おそらくインターフェイスは必要ありません。単にオーバーライドするだけです。 – aperkins

1

列挙型は最終的なもので、何も継承できません。あなたができる最善の方法は、toString()をオーバーライドし、共通の "to-stringer"実装に委譲して、実際の実装を何度も何度も書く必要がないようにすることです。

0

enumはあなたに利用可能な継承モデルを持っていないので、あなたはそれゆえ、あなたのenumクラスから何かを拡張し、することはできません。..

関連する問題