Что является хорошими шаблонами / методы для сокращения многословия [закрытого] Java

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

Java не является языком, я принял бы решение выполнить в этом. Это более стильно для передачи закрытия (или лямбда-выражение) как аргумент. Хотя объекты возможно эквивалентны закрытиям .

мне кажется, что Выполнение Вокруг Метода является видом подобных Инверсия Управления (Внедрение зависимости), что можно варьироваться для данного случая, каждый раз, когда Вы называете метод.

, Но это могло также быть интерпретировано как пример Связи Управления (говорящий метод, что сделать его аргументом, буквально в этом случае).

21
задан 3 revs 23 May 2017 в 12:00
поделиться

9 ответов

До введения в Java 7 оператора ромба статические фабричные методы для создания универсальных типов можно было использовать для уменьшения многословности за счет уменьшения необходимости повторять параметр типа. . (Это связано с тем, что без оператора ромба Java никогда не определяет параметр типа в конструкторах, но он будет делать выводы для вызовов методов.) Коллекции Google используют этот метод, поэтому вы можете написать:

Set<MyClassWithALongName> set = Sets.newHashSet();

вместо:

Set<MyClassWithALongName> set = new HashSet<MyClassWithALongName>();

Посмотрите в классах Lists , Sets и Maps Google Collections методы, начинающиеся с "new", чтобы получить дополнительные примеры этого.

Если вы пишут для старой версии Java, в Java 7 лучше просто использовать оператор ромба.

9
ответ дан 29 November 2019 в 20:55
поделиться

Используйте структуру внедрения зависимостей, такую ​​как spring. Я почти всегда удивляюсь тому, как много логики построения кода производит.

8
ответ дан 29 November 2019 в 20:55
поделиться

Похожая функция, о которой вы, вероятно, уже знаете, с использованием функции "varargs":

String[] array = new String[] {"stack", "over", "flow"};
List<String> list = Arrays.asList(array);

можно сократить

List<String> list = Arrays.asList("stack", "over", "flow");

По общему признанию, это небольшая экономия, но это немного снижает многословность. Как отмечает Томас, список будет неизменным, так что следите за этим. Фактически, вы можете изменить список, но не можете изменить его длину. Спасибо pimlottc за указание на это.

8
ответ дан 29 November 2019 в 20:55
поделиться

Интерфейсы Fluent могут помочь - использование построителей и цепочки методов для создания чего-то похожего на DSL в java. Код, который вы получите, может быть немного сложнее читать, поскольку он нарушает обычные соглашения о кодировании Java, такие как удаление набора / получения из свойств.

Итак, в поддельном Swing-свободном интерфейсе вы можете определить кнопку следующим образом:

JButton button = Factory.button().icon(anIcon).tooltip("Wow").swing();

Другой подход - использовать другой язык, многие из которых хорошо интегрируются с JVM, например:

2
ответ дан 29 November 2019 в 20:55
поделиться

Статические инициализаторы

Пример 1 (Карта):

Map<String, String> myMap = new HashMap<String, String>() {{
    put ("a", "b");
    put ("c", "d");
}};

Пример 2 (Список):

List<String> myList = new ArrayList<String>() {{
    add("a");
    add("b");
    add("c");
}};
0
ответ дан 29 November 2019 в 20:55
поделиться

Метод closeQuietly может использоваться в блоках try / finally в ситуациях, когда исключения ввода-вывода при закрытии неинтересны (или невозможны).

Closeable c = null;
try {
    ...
    c = openIt(...);
    ...
} finally {
    closeQuietly(c);
}

где:

/** Close 'c' if it is not null, squashing IOExceptions */
public void closeQuietly(Closeable c) {
    if (c != null) {
        try {
            c.close();
        } catch (IOException ex) {
            // log error 
        }
    }
}

Обратите внимание, что в Java 7 и более поздних версиях новый синтаксис «попытаться с ресурсами» делает этот конкретный пример избыточным.

2
ответ дан 29 November 2019 в 20:55
поделиться

Я обнаружил, что наиболее (единственный?) Эффективный способ написания сжатой java это вообще не писать java. В тех случаях, когда мне нужно было быстро написать что-то, что все еще взаимодействовало бы с Java, я нашел Groovy отличным выбором. Использование более лаконичного языка, который по-прежнему компилируется в байт-код JVM, может быть отличным решением. Хотя у меня нет личного опыта, я слышал, что Scala во многих случаях даже лучше, чем Groovy.

3
ответ дан 29 November 2019 в 20:55
поделиться

Для новых вопросов:

4: Реструктуризация приложения не будет проблемой. Они просто видят, что некоторые файлы удалены, а другие добавлены.

5: Как угодно часто. Чем чаще вы совершаете, тем легче исправить маленькие ошибки.

-121--3030628-

Извлечение lambdaj . Он имеет множество функций, которые могут помочь сделать ваш код более лаконичным и читаемым.

3
ответ дан 29 November 2019 в 20:55
поделиться

Я нашел сообщение в блоге, давая интересную технику, которая позволяет написать карту литерал в Java, как вы сможете сделать в Perl, Python, Ruby и т. Д.: Создание собственных литералов в Java - кортежи и карты Мне очень нравится этот подход! Я просто подведем его здесь.

Основная идея состоит в том, чтобы создать универсальную пару классу и определить статические функции, которые будут строить пару, а карту из набора пар варарг. Это позволяет следующую краткую карту буквальное определение:

Map(o("height", 3), o("width", 15), o("weight", 27));

, где o - это имя статической функции для построения пары объектов T1 и T2 для любых типов объектов T1 и T2, а также - это имя статической функции для построения карты. Я не уверен, что мне нравится выбор карта как имя функции конструкции карты, потому что она такая же, как имя интерфейса Java, но концепция все еще хороша.

1
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: