Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с нововведениями в Java 1.6 (аннотации)

504
23 ноября 2008 года
lexluther
71 / / 26.10.2004
Всем привет,

Помогите мне пожалуйста решить проблему с нововведениями в Java 1.6. Я пытаюсь реализовать аннотацию но она не работает.

Есть следующий класс (NewClassAttribute.java):

package myjavaapplication;

@interface NewClassAttribute {
String value();
}

Есть класс (NewClass.java):

package myjavaapplication;

@NewClassAttribute("NewClass")
public class NewClass
{
public NewClass()
{}

@Override
public void finalize()
{}
}

Есть класс main который делает получение аттрибута:

package myjavaapplication;

import static java.lang.System.out;
import static java.lang.System.in;

public class Main {

public static void main(String[] args) {

NewClass NC = new NewClass();

out.print(NC.getClass().getAnnotation(NewClassAttribute.class).value());
}
}

Т.е. я хочу вывести на вывод значение аттрибута "NewClass". Вроде код правильный, но он не работает так как постоянно вылетает Exception in thread "main" java.lang.NullPointerException

Вообщем NC.getClass().getAnnotation(NewClassAttribute.class) возвращает всегда null

NewClass.class.getAnnotation(NewClassAttribute.class).value() аналогично не работает.

Помогите пожалуйста, подскажите что я делаю неправильно.

PS: Также к примеру у меня аналогичные проблемы с энумерацией:

public enum NewClass
{
RED(20)
{
public NewClass next()
{
return RED;
}
}
}

Этот код просто не компилится (взят из учебника). Тогда как код:

public enum NewClass
{
RED
{
public NewClass next()
{
return RED;
}
}
}

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

Версия ОС:
Windows XP Service Pack 3

Версия JAVA (java -version):
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

Среда разработки (About окно):
Product Version: NetBeans IDE 6.1 (Build 200805300101)
Java: 1.6.0; Java HotSpot(TM) Client VM 1.6.0-b105
System: Windows XP version 5.1 running on x86; Cp1251; uk_UA (nb)
Userdir: G:\Documents and Settings\artiom\.netbeans\6.1
355
23 ноября 2008 года
<SCORP>
786 / / 21.10.2006
в примере с enum тебе не хватает соответствующего конструктора, который бы принимал int как параметр
нововведения - там же где и обычно, в гугле. http://java.sun.com/javase/6/webnotes/features.html
но тебе, по-моему надо нововведения 5-ой java. google в помощь
63
23 ноября 2008 года
Zorkus
2.6K / / 04.11.2006
Для того чтобы аннотация была доступна в рантайме через рефлексию, у нее должна быть RetentionPolicy=RUNTIME.
А у тебя в описании аннотации она не указана- следовательно, ставится в дефолтное значение CLASS. Т.е. после компиляции в байткод попадает, а вот в JVM уже не загружается.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/RetentionPolicy.html
P.S. Да, Скорп верно заметил что это изменения в Java 5.0 Tiger.
В Шестой яве изменения на уровня языка по-моему не было - только в JDK API и JVM.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог