2012-04-07 18 views
11

私はSPIを開発していて、インターフェイスを定義して、意味のあるものにtoString()をオーバーライドする必要があります。Java:toStringをオーバーライドするように実装を強制するデザインインターフェイス

具体的な実装のいずれかがである必要があるようなインタフェースをJavaで作成する方法はありますかオブジェクトのtoString()をオーバーライドする必要がありますか?例えば:

public interface Reportable 
{ 
    public String toString(); 
} 

public class Widget implements Fizz, Buzz, Reportable 
{ 
    // ... 

    @Override 
    public String toString() 
    { 
     // ... 
    } 
} 

私は上記のコードではない行動のこの種のない、しかし、私が探しているものの一例であるWidgettoString()をオーバーライドしない場合、すなわち、コンパイルを取得する知っていますエラーはインタフェース契約に違反しているためです。

+0

:http://stackoverflow.com/questions/8719482/force-tostring-implementation-in-subclasses –

+0

[.equalsメソッドをオーバーライドするクラスを強制]が重複する可能性(のhttp:/ /stackoverflow.com/questions/1612273/force-a-class-to-override-the-equals-method)。任意のメソッドで同じである必要があります。 –

答えて

16

いいえ、できません。 の別のメソッド名を選択することをおすすめします。

public interface Reportable 
{ 
    String createReport(); 
} 

これは、実装が適切なメソッドを記述するよう強制します。 toString()は、デバッグ表現、ユーザーが見ることができる表現(どのような時点で自分自身にロケールなどについて質問する必要があるか)など、意図的にはやや曖昧です。 もう1つはという意味は私にとっては良い考えではないようです。

10

私が理解することは、文字列表現をきれいに与えるクラスのセットを作成したいということです。したがって、System.out.println(yourobject)のようなものが呼び出されると、意味のあるデータが表示されます。

強制的にサブクラスをtoStringでオーバーライドすることはできません。しかし、あなたはこのようなことをすることができます。抽象クラスでは

abstract class MyBase 
{ 
    abstract String getNiceString(); 
    @Override 
    public String toString() 
    { 
     return getNiceString(); 
    } 
} 
+0

独創的な、アイデアのおかげで。 :) – Daren

+1

素晴らしい!これは受け入れられた答えでなければなりません。 – SnakeDoc

関連する問題