为什么StringBuffer和StringBuilder追加方法会丢弃超级调用返回的值

时间:2009-12-28 13:09:37

标签: java

这是一个出于好奇的问题。 今天我看了StringBuilderStringBuffer的实现。这是append()方法:

public StringBuilder append(String str) {
    super.append(str);
    return this;
}

AbstractStringBuilder.append(str)也会返回this。丢弃返回值(在StringBuilder.append(..)中)并再次返回this有什么好处,而不是将super调用的返回值强制转换为当前的具体实现。

3 个答案:

答案 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
}