如何覆盖 sub class 中最终方法的 javadoc?
How to override the javadoc for a final method in a sub class?
public class BaseClass {
/**
* Gets the value.
*/
public final String getValue() {
// returns something.
}
}
public class SubClass extends BaseClass {
/**
* Gets the value.
* <p/>
* The value is meaningless for SubClass.
*/
@Override // Cannot override final method
public final String getValue() {
super.getValue(); // Not overriding implementation, just javadoc
}
}
我不需要更改final方法的实现,我只是想为它更改Javadoc。
Java 未预见到这一点,因此无法使用标准 Java 工具。不过,您 mya 在 class 级别提供了更详细的解释。
您也可以尝试查看 Javadoc API (Doclet API) 并搜索它的一些自定义实现或实现您自己的扩展,例如在 class 级别引入新注释,并实现自定义 Javadoc 生成器以遵守这些注释。我不知道这样的东西是否已经存在。
更新:
另见 ,他有一堆你不应该那样做的理由。
简单地说:你不能那样做。如果有的话,您可以在那个子 class 的定义中放置一些 javadoc 来解释那个最终方法的行为已经改变。如果你能做到这一点 - 你可以将 base class 上的 javadoc 更改为:"sub classes might invalidate this method" 或类似的东西。
除此之外,您应该明白这也是一个有问题的想法。
继承主要不是关于代码重用。它是关于表达一些 class A is-a B,因为 A extends B. 所以当你决定让一个方法 meaningless 在 subclass 上,你基本上是在使 superclass 的合同无效。这根本不是好的做法(请参阅 Liskov substitution principle 了解为什么在 修改 继承方法的契约时必须小心)。
你看,关键字 final 不仅是编译器的信息。它还表达了将它用于该方法的人的 意图 。这个人说:"I don't want that subclasses temper with this method!"
public class BaseClass {
/**
* Gets the value.
*/
public final String getValue() {
// returns something.
}
}
public class SubClass extends BaseClass {
/**
* Gets the value.
* <p/>
* The value is meaningless for SubClass.
*/
@Override // Cannot override final method
public final String getValue() {
super.getValue(); // Not overriding implementation, just javadoc
}
}
我不需要更改final方法的实现,我只是想为它更改Javadoc。
Java 未预见到这一点,因此无法使用标准 Java 工具。不过,您 mya 在 class 级别提供了更详细的解释。
您也可以尝试查看 Javadoc API (Doclet API) 并搜索它的一些自定义实现或实现您自己的扩展,例如在 class 级别引入新注释,并实现自定义 Javadoc 生成器以遵守这些注释。我不知道这样的东西是否已经存在。
更新:
另见
简单地说:你不能那样做。如果有的话,您可以在那个子 class 的定义中放置一些 javadoc 来解释那个最终方法的行为已经改变。如果你能做到这一点 - 你可以将 base class 上的 javadoc 更改为:"sub classes might invalidate this method" 或类似的东西。
除此之外,您应该明白这也是一个有问题的想法。
继承主要不是关于代码重用。它是关于表达一些 class A is-a B,因为 A extends B. 所以当你决定让一个方法 meaningless 在 subclass 上,你基本上是在使 superclass 的合同无效。这根本不是好的做法(请参阅 Liskov substitution principle 了解为什么在 修改 继承方法的契约时必须小心)。
你看,关键字 final 不仅是编译器的信息。它还表达了将它用于该方法的人的 意图 。这个人说:"I don't want that subclasses temper with this method!"