为什么空方法 appendTo 有意义?

Why does the empty method appendTo make sense?

在 java 早上 7 点使用 PropertyChangeEvent class 突然我发现了这个:

/**
 * Returns a string representation of the object.
 *
 * @return a string representation of the object
 *
 * @since 1.7
 */
public String toString() {
    StringBuilder sb = new StringBuilder(getClass().getName());
    sb.append("[propertyName=").append(getPropertyName());
    appendTo(sb);   // <----HERE
    sb.append("; oldValue=").append(getOldValue());
    sb.append("; newValue=").append(getNewValue());
    sb.append("; propagationId=").append(getPropagationId());
    sb.append("; source=").append(getSource());
    return sb.append("]").toString();
}

void appendTo(StringBuilder sb) {
}

什么让我抓狂,为什么要调用方法 appendTo()

特别是那个方法什么都不做?

这有什么意义吗,我第一眼找不到?

如果 child class 重写 appendTo 方法,这是完全合理的。

这就是如何将特定的 child class 内容注入到此函数中。 (尽管对此效果的评论会很好)。

另一种方法 - 需要完全覆盖 toString - 可能会导致相当多的代码重复。

鉴于该实施:

void appendTo(StringBuilder sb) {
}

我认为:这是一个"leftover";打算做某事的人工制品;但只是忘记了。

该方法受包保护;所以你只能在同一个包的 subclasses 中覆盖它;但别处。并且:它没有在任何地方记录。因此 no PropertyChangEvent class 的用户甚至会注意到此方法 可以 被覆盖。

没有有意义的理由做这样的事情。因此我的(自以为是的)回答:这是一个错误;或更准确地说;这是源代码中的错误;但幸运的是,它不会在运行时导致 失败 。好吧,除非某个可怜的人碰巧扩展了这个 class;并且碰巧编写了这样一个 appendTo() 方法,它做了一些非常奇怪的事情。

当然,可以做这样的事情;例如,让扩展 classes 能够 将一些自定义元素插入 toString() 的结果中。但如果那是这个构造的目标;它惨遭失败;因为没有记录。