代码之家  ›  专栏  ›  技术社区  ›  Bozho

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

  •  3
  • Bozho  · 技术社区  · 15 年前

    这是一个奇怪的问题。 今天我看了一下 StringBuilder StringBuffer append() 方法:

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

    AbstractStringBuilder.append(str) 还返回 this StringBuilder.append(..) )归来 同样,不是强制转换 super 调用当前的具体实现。

    3 回复  |  直到 15 年前
        1
  •  7
  •   Adam Batkin    15 年前

        2
  •  3
  •   Gregory Pakosz    15 年前

    我不确定这是否与铸造成本有关。

    我的观点是,该方法是这样编写的,以防将来需要做的事情比在超级类中所做的要多。

    public StringBuilder append(String str) {
        super.append(str);
    
        // do something more?
    
        return this;
    }
    

    或者方法定义是在编写类时由IDE自动生成的。或者这只是编码风格的问题。

        3
  •  2
  •   Thomas Jung    15 年前

    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
    }