为什么空方法 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()
的结果中。但如果那是这个构造的目标;它惨遭失败;因为没有记录。
在 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()
的结果中。但如果那是这个构造的目标;它惨遭失败;因为没有记录。