Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Annotations


Автор: neutrino 3.10.2010, 10:18
Приветствую!

Возможно ли написать в Java такую аннотацию, чтобы полю помеченному ей присваивалось случайное значение? Если да, можно небольшой пример того как это сделать?

Спасибо.

Автор: neutrino 3.10.2010, 17:08
Народ, мне это нужно чтобы все тут в Интеле перевернуть с ног на голову и перевести их на джаву!!! Оч прошу помочь. Я бы забацал это все на дотнете, благо у меня много опыта (и с аттрибутами тоже), но у них тут линь, а о винде и слышать не хотят! smile

Автор: Vladus 3.10.2010, 20:55
neutrino, если я вас правильно понимаю, то вот очень примитивный пример, который можно легко улучшить

Код

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Random {
}
 
Код

import java.lang.reflect.Field;

public class Test {

    @Random
    public double i;

    public static void main(String[] args) {
        Test test = new Test();
        Class clazz = Test.class;

        try {
            for (Field field : clazz.getFields()) {
                Field property = clazz.getDeclaredField(field.getName());
                if (null != property.getAnnotation(Random.class)) {
                    field.setDouble(test, Math.random());
                }
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }


        System.out.println(test.i);
    }

}

Автор: neutrino 4.10.2010, 08:37
Vladus, Ясно. Спасибо. 

Автор: danilka 4.10.2010, 10:08
Цитата(Vladus @  3.10.2010,  20:55 Найти цитируемый пост)
            for (Field field : clazz.getFields()) {
                Field property = clazz.getDeclaredField(field.getName());


А в чем смысл вот так писать?
Почему не сделать сразу

Код

for (Field field : clazz.getDeclaredFields()) {
...
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)