7

インターフェイスと、そのインターフェイスを実装する多くのクラスがあるとします。これらの各クラスでのデフォルト実装のオーバーライドを強制したいと考えていますtoString()(つまり、一部のクラスがそれをオーバーライドしない場合、コンパイル エラーが発生するはずです)。

それを達成することは可能ですか?public abstract String toString();インターフェイス本体で、アノテーションの有無にかかわらず、 を宣言@Overrideすることは有効ですが、効果はありません。

4

4 に答える 4

14

うん、ちょっと。

protected abstract String internToString();

その後

@Override
public String toString() {
 return internToString(); 
}

あなたの基本クラスで。

于 2012-12-01T20:33:49.407 に答える
2

注釈と注釈プロセッサを作成し、コンパイル中に使用します。

注釈は次のようになります。

public @ interface MustOverrideToString { }

注釈プロセッサは、次のクラスを探します。

  1. MustOverrideToString アノテーションでクラスを拡張する
  2. toString をオーバーライドしません
于 2012-12-02T01:31:02.137 に答える
1

toString()特定のクラスへのメソッドの実装以外は何も宣言する必要はないと思います。

于 2012-12-01T20:34:30.377 に答える
0

クラスを作成する場合、abstract別のメソッドは必要ありません。

public abstract class Base{
    public abstract String toString();
}

...

public class Sub extends Base{} //will not compile
于 2012-12-02T08:08:51.983 に答える