Использование StringBuffer и StringBuilder в качестве типа возврата метода в Java - PullRequest
0 голосов
/ 11 февраля 2019

Является ли плохой идеей использовать StringBuilder или StringBuffer в качестве типа возврата метода в Java?Я часто возвращал String в качестве типа возврата из метода Java, но никогда не использовал StringBuilder или StringBuffer, даже если я выполнял операции, используя их внутри метода.

Может ли кто-нибудь объяснить мне, если рекомендуется НЕ использовать StringBuilder и StringBuffer в качестве типа возврата метода?Если нет, то каковы причины этого?Одной из причин может быть то, что эти два изменчивы.Но как это имеет какое-то значение, поскольку мы часто используем другой производный тип в качестве возвращаемого типа метода, который является изменяемым.

Может, кто-нибудь объяснит недостатки (если таковые имеются) использования StringBuffer и Builder в качестве типа возврата метода с кодом, может быть?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Идея шаблона построения состоит в том, чтобы отделить конструкцию от представления.

Вполне нормально, если вы используете возвращаемое значение для продолжения процесса построения объекта.С другой стороны, плохо, если возвращаемое значение не будет изменено и уже будет использоваться в качестве представления.

В отношении этих классов нет ничего конкретного, они просто представляют изменяемую последовательность символов.Вам нужно провести черту между построением и представлением.

0 голосов
/ 11 февраля 2019

StringBuffer старый и был заменен на StringBuilder для скорости.

Возвращение StringBuilder может быть плохим стилем: иногда лучше передать StringBuilder как параметр .Сравните:

[лучший] Как параметр:

void dump(StringBuilder sb) {
    sb.append(name);
    for (Foo child : children) {
        child.dump(sb);
    }
}

[без проблем, неэффективно] Сравнение с агрегированным неизменным значением:

String toString() {
    return name + left.toString() + right.toString();
}

[некрасиво] Сравнение с возвратом изменяемого значения:

StringBuilder dump() {
    StringBulder sb = new StringBuilder();
    for (Foo child : children) {
        sb.append(child.dump()); // Inefficient
    }
    return sb;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...