Предположим, у вас есть список GPA, найдите среднее значение, которое вы можете использовать в следующих документах в Java 8
List<Double> gpas = Arrays.asList(1.0,2.0,3.0,4.0);
double average = gpas.stream()
.collect(Collectors.averagingDouble(value -> value.doubleValue()));
System.out.println(average);
Обработка аннотации происходит на абстрактном синтаксическом дереве. Это - структура, которую создает синтаксический анализатор, и компилятор управляет.
Текущая спецификация (связываются для прибытия) говорит, что процессоры аннотации не могут изменить абстрактное синтаксическое дерево. Одно из последствий этого - то, что это не подходит, чтобы сделать генерацию кода.
Если Вы хотели бы этот вид функциональности, затем взглянуть на XDoclet. Это должно дать Вам предварительную обработку генерации кода, я думаю, что Вы ищете.
Для Вашего @NonNull
пример, JSR-305 является рядом аннотаций для улучшения обнаружения дефекта программного обеспечения и включает @NonNull
и @CheckForNull
и хост других.
Править: Ломбок проекта решает точно проблему поколения метода set и метода считывания.
Существует ли способ использовать аннотации в Java для замены средств доступа?
Короче говоря, нет, Java 5/6 компилятор не поддерживает это, и для третьих лиц было бы трудно добавить такую поддержку агностическим компилятором способом.
Для получения лучшего дескриптора на аннотациях я запустил бы с JUnit. При написании кода для версий 3 (предварительные аннотации) и 4 (основанный на аннотации) Вы быстро разобрались, как платформа заменила контракт на основе шаблонов именования с тем, который был основан на аннотации.
Для более поразительного примера сравните EJB 2 с EJB 3.
@attribute Вы отсылаете также работу наклона с аннотациями, поскольку они находятся теперь в Java (как jamesh указаны).
То, что Вы, вероятно, ищете, является "свойствами", которые еще не существуют в Java. Но, очень горячая тема прямо сейчас, и мы могли бы получить их в Java 7 или возможно Java 8 (поскольку я все еще застреваю на 1.4.2 это, привычка помогает мне, но это могло бы помочь Вам).
Был интересный намек обсуждения на реализацию свойств с аннотациями в эпизоде № 219 Отряда Java.
Возможно, просто не, где Вы объявляете их.
Выезд http://code.google.com/p/javadude/wiki/Annotations.
Мне аннотировали класс как
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;
@Bean(properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
})
public class Person extends PersonGen {}
И это генерирует класс PersonGen для Вас, содержа методы считывания/методы set, и т.д.
Процессор также делает вполне немного больше. Обратите внимание, что я работаю над новой версией его, которая имеет немного поломки API от текущей версии
Существует проект под названием Овальный, и я думаю, что он делает то, что Вы хотите. http://oval.sourceforge.net/
Если я remeber право для вещи усовершенствования AspectJ необходим, однако простая работа проверки без AspectJ.попробуйте.
Существует, также В спящем режиме Блок проверки допустимости, проверяют его также :P
Несмотря на то, что они иногда полезны, если вы серьезно отсутствуют атрибуты, то вы, вероятно, немного неустойчивые в целом дизайн OO.
Идея конструкции oO заключается в том, что методы «действия», где вы просите объекта сделать что-то для вас - не просто устанавливать или получать значение - это не объект, это структура.
Если вы думаете, что отсутствие атрибутов является серьезной проблемой, я настоятельно рекомендую вам некоторое время попробовать кодировать некоторое время, не используя сеттернировщики и сопротивляющуюся GetTers.
Сначала это может быть трудно, но я поставил, в конце концов у вас будет более прочный понять принципы дизайна OO.
(Примечание. Существуют редкие ситуации, когда вы должны делать операции типа «Setter» после конструкции объекта - чаще всего, когда вы должны создать два объекта, которые относятся друг к другу. В этом случае я рекомендую что-то вроде строителя Узор, где ваши посетители должны называться один раз и защищены от имени двух дважды)
Геттеры / сеттеры: Да, это возможно. Project Lombok ( http://projectlombok.org/index.html ) определяет аннотации для создания геттеров / сеттеров и т. Д.
Так, например,
@lombok.Data;
public class Person {
private final String name;
private int age;
}
сгенерирует getName
(не установщик, поскольку он окончательный) и getAge
/ setAge
. Он также сгенерирует равно
, hashCode
, toString
и конструктор, инициализирующий обязательные поля (в данном случае name
). Добавление @AllArgsConstructor
приведет к созданию конструктора, инициализирующего оба поля. Использование @Value
вместо @Data
сделает объекты неизменяемыми.
Существуют другие аннотации и параметры, дающие вам контроль над правами доступа (должен ли ваш геттер быть защищенным или общедоступным), именами ( getName ()
или name ()
?) И т. Д. ... И это еще не все. Например, мне очень нравятся аннотации для построителей и методов расширения .
Lombok очень прост в использовании:
NotNull: поддерживается findbugs и IDEA IDE, возможно, другими