Выполняются Вокруг Метода , то, куда Вы передаете произвольный код методу, который может выполнить установку, и/или разрушение кодируют и выполняют Ваш промежуточный код.
Java не является языком, я принял бы решение выполнить в этом. Это более стильно для передачи закрытия (или лямбда-выражение) как аргумент. Хотя объекты возможно эквивалентны закрытиям .
мне кажется, что Выполнение Вокруг Метода является видом подобных Инверсия Управления (Внедрение зависимости), что можно варьироваться для данного случая, каждый раз, когда Вы называете метод.
, Но это могло также быть интерпретировано как пример Связи Управления (говорящий метод, что сделать его аргументом, буквально в этом случае).
До введения в Java 7 оператора ромба статические фабричные методы для создания универсальных типов можно было использовать для уменьшения многословности за счет уменьшения необходимости повторять параметр типа. . (Это связано с тем, что без оператора ромба Java никогда не определяет параметр типа в конструкторах, но он будет делать выводы для вызовов методов.) Коллекции Google используют этот метод, поэтому вы можете написать:
Set<MyClassWithALongName> set = Sets.newHashSet();
вместо:
Set<MyClassWithALongName> set = new HashSet<MyClassWithALongName>();
Посмотрите в классах Lists
, Sets
и Maps
Google Collections методы, начинающиеся с "new", чтобы получить дополнительные примеры этого.
Если вы пишут для старой версии Java, в Java 7 лучше просто использовать оператор ромба.
Используйте структуру внедрения зависимостей, такую как spring. Я почти всегда удивляюсь тому, как много логики построения кода производит.
Похожая функция, о которой вы, вероятно, уже знаете, с использованием функции "varargs":
String[] array = new String[] {"stack", "over", "flow"};
List<String> list = Arrays.asList(array);
можно сократить
List<String> list = Arrays.asList("stack", "over", "flow");
По общему признанию, это небольшая экономия, но это немного снижает многословность. Как отмечает Томас, список будет неизменным, так что следите за этим. Фактически, вы можете изменить список, но не можете изменить его длину. Спасибо pimlottc за указание на это.
Интерфейсы Fluent могут помочь - использование построителей и цепочки методов для создания чего-то похожего на DSL в java. Код, который вы получите, может быть немного сложнее читать, поскольку он нарушает обычные соглашения о кодировании Java, такие как удаление набора / получения из свойств.
Итак, в поддельном Swing-свободном интерфейсе вы можете определить кнопку следующим образом:
JButton button = Factory.button().icon(anIcon).tooltip("Wow").swing();
Другой подход - использовать другой язык, многие из которых хорошо интегрируются с JVM, например:
Статические инициализаторы
Пример 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");
}};
Метод 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 и более поздних версиях новый синтаксис «попытаться с ресурсами» делает этот конкретный пример избыточным.
Я обнаружил, что наиболее (единственный?) Эффективный способ написания сжатой java это вообще не писать java. В тех случаях, когда мне нужно было быстро написать что-то, что все еще взаимодействовало бы с Java, я нашел Groovy отличным выбором. Использование более лаконичного языка, который по-прежнему компилируется в байт-код JVM, может быть отличным решением. Хотя у меня нет личного опыта, я слышал, что Scala во многих случаях даже лучше, чем Groovy.
Для новых вопросов:
4: Реструктуризация приложения не будет проблемой. Они просто видят, что некоторые файлы удалены, а другие добавлены.
5: Как угодно часто. Чем чаще вы совершаете, тем легче исправить маленькие ошибки.
-121--3030628-Извлечение lambdaj . Он имеет множество функций, которые могут помочь сделать ваш код более лаконичным и читаемым.
Я нашел сообщение в блоге, давая интересную технику, которая позволяет написать карту литерал в Java, как вы сможете сделать в Perl, Python, Ruby и т. Д.: Создание собственных литералов в Java - кортежи и карты Мне очень нравится этот подход! Я просто подведем его здесь.
Основная идея состоит в том, чтобы создать универсальную пару классу и определить статические функции, которые будут строить пару, а карту из набора пар варарг. Это позволяет следующую краткую карту буквальное определение:
Map(o("height", 3), o("width", 15), o("weight", 27));
, где o
- это имя статической функции для построения пары объектов T1 и T2 для любых типов объектов T1 и T2, а также
- это имя статической функции для построения карты. Я не уверен, что мне нравится выбор карта
как имя функции конструкции карты, потому что она такая же, как имя интерфейса Java, но концепция все еще хороша.