这是一个出于好奇的问题。
今天我看了StringBuilder
和StringBuffer
的实现。这是append()
方法:
public StringBuilder append(String str) {
super.append(str);
return this;
}
AbstractStringBuilder.append(str)
也会返回this
。丢弃返回值(在StringBuilder.append(..)
中)并再次返回this
有什么好处,而不是将super
调用的返回值强制转换为当前的具体实现。
答案 0 :(得分:7)
我的第一个想法是铸造可能很昂贵,所以如果可以避免那么最好。
答案 1 :(得分:3)
我不确定这与铸造成本有什么关系。
我的观点是,这个方法是这样编写的,以防未来的需求需要做的比超类中的更多。
public StringBuilder append(String str) {
super.append(str);
// do something more?
return this;
}
或者在编写类时IDE已自动生成方法定义。或者只是编码风格的问题。
答案 2 :(得分:2)
因为
public StringBuilder append(String str) {
return (StringBuilder) super.append(str);
}
非常难看。它甚至更短。
(有些语言支持此directly。例如:
abstract class AbstractStringBuilder{
type T = this.type
def append(str : String) : T = ...
}
abstract class StringBuilder{
//already defined by AbstractStringBuilder return type is StringBuilder
}
)