Я ищу решение чрезмерной многословности Java без использования Groovy - PullRequest
4 голосов
/ 20 апреля 2009

Мне нравится, как Groovy делает все ваши переменные экземпляра и переменные класса общедоступными и записывает методы получения и установки от вашего имени. Это экономит много ненужного кодирования. С другой стороны, мой босс ненавидит это, делая меня очень грустным: (

Есть ли способ добиться лаконичности Groovy в Java без использования Groovy или какого-либо другого фреймворка / надстройки?

Я чувствую, что силы, которые будут, не будут любезно относиться к введению этой иностранной структуры, в которой я работаю.

Итак, я ищу решение чрезмерной многословности Java без использования Groovy или чего-то подобного.

Можно ли это сделать только на Java - например, просто обнародовать все?

Ответы [ 8 ]

8 голосов
/ 20 апреля 2009

Язык Java такой, какой он есть. Вы не найдете много, чтобы изменить основной язык без перехода на новый язык (например, Groovy). Получить бай-ин от руководства может быть не так сложно, как вы думаете, чтобы перейти к отличной. Я был в таком же положении, что и вы несколько лет назад. Вы можете начать вводить Groovy в некоторые области программного обеспечения, которые имеют смысл.

Отличное место для начала - начать использовать его для модульного тестирования. По сути, когда вы пишете класс в groovy, он компилируется в байт-код Java. Пока у вас есть классные банки на вашем пути к классам, другие могут даже не знать, что это отличный код. Используя его для тестирования, вы можете продемонстрировать, как он упрощает ваш код и облегчает работу. Вы должны быть в состоянии продать это руководству.

Оттуда продолжайте вводить его в других новых областях, где динамический язык избавит вас от некоторой работы. Groovy и Java прекрасно сочетаются друг с другом, поскольку используют один и тот же набор базовых библиотек.

6 голосов
/ 20 апреля 2009

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

Я считаю, что писать геттеры и сеттеры - самая повторяющаяся и неинтересная часть написания новых классов. С IDE, подобной Eclipse , которая может автоматически генерировать для вас геттеры и сеттеры , это может облегчить написание избыточного кода.

Конечно, это не избавит от необходимости использовать методы getX и setX, но, по крайней мере, делает реализацию классов немного проще и менее обременительной.

3 голосов
/ 20 апреля 2009

Идите с неизменными структурами данных. Нет добытчиков, нет сеттеров, нет хлопот.

Вы можете попробовать Функциональную Java . Это просто обычная библиотека Java, но поставляется с мощными абстракциями и полезными (неизменяемыми) структурами данных, которые позволяют вам говорить больше в меньшем количестве кода. Например, переведите это:

List<String> s = new ArrayList<String>();
  for (String x : xs) {
    for (String y : ys) {
      for (String z : zs) {
        s.add(doSomething(x, y, z));
      }
    }
  }

... к этому:

List<String> s = xs.bind(ys, zs, doSomething);
1 голос
/ 20 апреля 2009

Вы можете использовать АОП, чтобы помочь вывести некоторые подробности.

Например, если у вас есть свойство: имя строки;

Затем вы можете определить: @GetterSetter public String Name (Строковое имя) {};

Затем создайте аспект, который ищет аннотацию, и поместите его вокруг, так что любое чтение, когда параметр имеет значение NULL или запись (параметр не является NULL), будет выполняться соответствующим образом. действие.

Это было бы довольно легко написать, но тогда вы должны получить бай-ин на AOP, что может быть непросто.

Но, как уже упоминалось, Eclipse и Netbeans легко создадут геттеры / сеттеры, поэтому, если вам не нужно делать с ними ничего особенного, это будет довольно просто.

Я склонен помещать свои свойства в их собственный класс, который является просто getters / setters, тогда мне не нужно смотреть на многословность, а также методы equals и hash, если необходимо, тогда в других моих классах используйте это и скройте скучное дополнительное кодирование.

0 голосов
/ 16 мая 2009

Вы можете пометить любое свойство или метод любым из стандартных модификаторов доступа или объявлений типов в Groovy.

Помните, Groovy - это расширенный набор Java.

0 голосов
/ 27 апреля 2009

Вы можете значительно повысить эффективный уровень абстракции Java, используя доменные рамки. Например, Restlet заботится о большинстве скучных деталей, когда вы пишете веб-сервисы RESTful. Или, если вам нужно отобразить POJO в и из XML или JSON, такие пакеты, как XStream или JAXB, автоматически генерируют логику отображения. Чтобы избежать утомительного программирования JDBC, попробуйте менеджер персистентности, такой как iBatis или Hibernate. Системы шаблонов, такие как Freemarker и Velocity, значительно упрощают создание разметки.

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

(Вы можете спросить своего босса, можете ли вы оценить Groovy в роли поддержки вашего проекта, например, написать несколько юнит-тестов.)

0 голосов
/ 20 апреля 2009

Попробуйте мои аннотации для бобов: http://code.google.com/p/javadude/wiki/Annotations

Процессор аннотаций генерирует для вас суперкласс с множеством типовых шаблонов, которые вы обычно должны написать:

@Bean(
    properties={
        @Property(name="name", bound=true),
        @Property(name="age", type=int.class, bound=true)
    }
)
public class Person extends PersonGen {
}
0 голосов
/ 20 апреля 2009

Я ничего не знаю о том, чтобы сделать ваш исходный код меньше, кроме более эффективных сред для конкретных задач (JPA, Swing и т.

Такого рода, если функциональность обычно исходит от вашей IDE.

Я использую Netbeans, у которого есть инструменты для написания методов получения / установки, автоматического внедрения абстрактных методов и различных других ярлыков. Конечно, исходный код все еще такой же подробный.

...