Использование StringBuilder с двойной инициализацией

Инициализация двойной скобкой хороша для лучшей видимости контекста кода Java.

к сожалению StringBuilder не может использовать с двойной инициализацией скобки, как

    final String[] array = new String[] {"A", "B"};
    System.out.println(new StringBuilder(){{
                           for (String s : array){
                               append(s + "\n");
                           }
                       }}.toString());

это хорошая альтернатива? какие-нибудь лучшие предложения? Мое намерение на этот вопрос не состоит в том, чтобы найти способ объединения строк. Мое намерение состоит в том, чтобы найти способ использовать двойную скобку со StringBuilder.

    final String[] array = new String[] {"A", "B"};
    System.out.println(new Object(){
        @Override public String toString(){
            StringBuilder stringBuilder = new StringBuilder();
            for (String s : array){
                stringBuilder.append(s + "\n");
            }
            return stringBuilder.toString();
        }
    });

3 ответа

Если вы пытаетесь достичь просто создания строки из массива строк, вы можете использовать метод Arrays.toString():

System.out.println(Arrays.toString(array));

Этот метод возвращает строковое представление содержимого указанного массива.

Альтернативный метод неприемлем, потому что он изменил класс объекта StringBuilder.

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

    final String[] array = {"a", "b"};
    StringBuilder sb = new StringBuilder(new Object(){
        @Override
        public String toString() {
            String str = "";
            for(String st : array){
                str+=st;
            }
            return str;
        }
    }.toString());
    System.out.println(sb);

С дополнительным служебным классом возможна двойная инициализация скобки. с

public static class StringBuild{
    private StringBuilder stringBuilder = new StringBuilder();

    public void append(String string){
        stringBuilder.append(string);
    }

    @Override
    public String toString(){
        return stringBuilder.toString();
    }
}

могу я написать

    final String[] array = new String[] {"A", "B"};
    System.out.println(new StringBuild(){{
            for (String s : array){
                append(s + "\n");
            }
        }
    });
Другие вопросы по тегам