1

Foo と Bar の 2 つのクラスがあり、Bar は Foo を拡張します。

スーパークラスには、メソッド f() があります。サブクラスはこのメソッドをオーバーライドし、意図的に例外をスローして、Bar のインスタンスで f() が呼び出されないようにします。

class Foo {
  public void f() {
     // does something useful
  }

}


class Bar extends Foo {
  @Override
  public void f() {
      throw new UnsupportedOperationException("Srsly, thou shalt not");
  }
}

ここで私の質問があります。Eclipse などの IDE と通信するオーバーライドされたメソッドで使用できる、呼び出してはならない注釈はありますか? ユーザーが Bar のインスタンスを処理しているときに Eclipse のオートコンプリート リストがメソッドを除外するように、@deprecated タグを軽く乱用したいと思っていましたが、より良いオプションがあるかどうかを知りたかったのです。

class Bar extends Foo {

  /**
   * @deprecated
   */
  @Override
  public void f() {
      throw new UnsupportedOperationException("Srsly, thou shalt not");
  }
}
4

2 に答える 2

-2

関数 f() を非公開にします。そうすれば、Bar の外で呼び出されることはありません。

于 2013-02-23T11:57:06.843 に答える
-2

Javaのすべての(非静的)メソッドは仮想であり、呼び出しは実行時に解決されるため、そうではありません。つまり、Bar のバージョンのメソッドが実行時に呼び出されることをコンパイラが検出する方法はありません。

于 2013-02-23T02:31:20.027 に答える