java注释不要调用重写方法

时间:2013-02-23 02:21:18

标签: java annotations override subclass deprecated

我有两个类Foo和Bar,其中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进行通信,而不应该调用它?我发现自己想要轻易滥用@deprecated标签,以便当用户处理Bar实例时,Eclipse 中的自动完成列表会超出方法,但我想知道是否存在是一个更好的选择。

class Bar extends Foo {

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

2 个答案:

答案 0 :(得分:-2)

不是没有,因为Java中的所有(非静态)方法都是虚拟的,并且调用是在运行时解析的。换句话说,编译器无法检测到Bar的版本将在运行时调用。

答案 1 :(得分:-2)

我会将函数f()设为私有。 这样,它永远不会被称为Bar。