2017-01-27 3 views
1

Я занимаюсь обработкой естественного языка и поэтому реализовал класс Sentence в основном ArrayList с некоторой метаинформацией. Я хотел бы написать переписать свой метод toString(), который просто вставляет строки, разделенные пробелами. Я получил его работу, используя метод унаследованного get, но мне было интересно, можно ли и лучше (с точки зрения эффективности и кодирования) получить доступ к полям напрямую.toString methode для класса, унаследованного от arrayList

Вот упрощенная версия моего класса:

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(); 
    } 

ответ

2

Лучше использовать метод get(). Скорее, это не должно сильно замедлять ваш код (если вы считаете иначе, вы должны написать небольшую программу, чтобы продемонстрировать эффект деградации скорости, прежде чем придерживаться этой веры). Что еще более важно, ArrayList не раскрывает свои внутренние поля, и это хороший дизайн. Эта конструкция защищает любой будущий побочный эффект для других (подклассы, которые расширяют его), если разработчик решает изменить внутреннюю реализацию ArrayList.

Кстати, вы также можете рассмотреть альтернативный проект - вместо того, чтобы позволить SentenceпродлитьArrayList, пусть SentenceсодержатArrayList. Это называется принципом Состав над наследованием.

Из Википедии: https://en.wikipedia.org/wiki/Composition_over_inheritance

состава по наследству (или композиционный принцип повторного использования) в объектно-ориентированного программирования является принцип, что классы должны достичь полиморфное поведение и повторное использование кода по их составу (по , содержащий экземпляры других классов, которые реализуют желаемую функциональность ), а не наследование от базового или родительского класса. Это часто заявляемый принцип ООП, например, в влиятельных моделях дизайна: «Фавориты» «над» классом Наследование ».

+1

Благодарим вас за разъяснения и предложения относительно дальнейших чтений. –

Смежные вопросы