toString从arrayList继承的类的方法

时间:2017-01-27 15:06:52

标签: java arraylist nlp tostring

我正在做一些自然语言处理,因此实现了一个Sentence类基本上是一个带有一些元信息的ArrayList。我想写一下覆盖它的toString()方法,它只是粘贴用空格分隔的字符串。我通过使用继承的get方法来实现它,但我想知道是否可以更好地(在效率和编码实践方面)直接访问字段。

以下是我班级的简化版本:

public class Sentence extends ArrayList<String> {
    int sentimentScore;
    String Speaker;

    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        for(int i =0; i < super.size(); i++){
            sb.append(super.get(i));
            sb.append(" ");
        }
        return sb.toString();
    }

1 个答案:

答案 0 :(得分:2)

最好使用get()方法。速度方面,它不应该减慢你的代码(如果你不相信,你应该写一个小程序来证明速度降低的影响,然后再坚持这个信念)。更重要的是,ArrayList不会暴露其内部字段,这是一个很好的设计。如果维护者决定改变ArrayList的内部实现,这种设计可以保护任何未来的副作用(扩展它的子类)。

顺便说一句,您可能还想考虑替代设计 - 而不是让Sentence 扩展 ArrayList,让Sentence 包含 ArrayList。这被称为组合而不是继承的原则。

来自维基百科:https://en.wikipedia.org/wiki/Composition_over_inheritance

  

继承的构成(或复合重用原则)in   面向对象编程是类应该的原则   通过组合实现多态行为和代码重用(通过   包含实现所需的其他类的实例   功能)而不是从基类或父类继承。   这是OOP经常陈述的原则,例如在有影响力的原则中   设计模式:“赞成'对象组成'超过'类   继承”。“