Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аннотации, Что и как? 
:(
    Опции темы
Resilient
Дата 22.6.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Хотелось бы создать класс, который бы читал сам себя Т.е.

Код

class MyClass{
// список полей, их количество переменно.
A a;
B b;
....
// метод, который читает этот же класс.
MyClass method (...){...}
}

Сказали, что это можно сделать с помощью аннотаций, вставив их перед объектами, которые надо читать.
Или же наоборот, читать до аннотации перед методом.
Вот ваще что-то пока никак... М.б. ссылку какую дадите, буду рад smile

М.б. есть какие-то иные пути? 
PM MAIL   Вверх
Kangaroo
Дата 22.6.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(Resilient @  22.6.2009,  15:07 Найти цитируемый пост)
Хотелось бы создать класс, который бы читал сам себя

Что значить "читал сам себя"? Что нужно узнать?


--------------------
Lost....
PM MAIL MSN   Вверх
Resilient
Дата 22.6.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Цитата(Kangaroo @ 22.6.2009,  15:25)
Цитата(Resilient @  22.6.2009,  15:07 Найти цитируемый пост)
Хотелось бы создать класс, который бы читал сам себя

Что значить "читал сам себя"? Что нужно узнать?

Например, количество полей, иметь возможность получить их все (каждое по отдельности).

Добавлено @ 15:38
М.б. это можно сделать отдельно? не обязательно самочтение. Тогда нужен метод, который бы мог вернуть только помеченные поля класса.

Это сообщение отредактировал(а) Resilient - 22.6.2009, 15:39
PM MAIL   Вверх
dorogoyIV
Дата 22.6.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Код

java.lang.Class<T>
там есть разные методы...
  java.lang.reflect.Field[] getDeclaredFields()
  java.lang.reflect.Method[] getDeclaredMethods()
  ...

PM MAIL   Вверх
Resilient
Дата 23.6.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Может кто-нить пояснить почему следующий кусок не работает. 
Взято из http://java.sun.com/j2se/1.5.0/docs/guide/...nnotations.html

Код

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}

public class Foo {
    @Test public static void m1() { }
    public static void m2() { }
    @Test public static void m3() {
        throw new RuntimeException("Boom");
    }
    @Test public static void m5() { }
    public static void m6() { }
    @Test public static void m7() {
        throw new RuntimeException("Crash");
    }
    public static void m8() { }
}

import java.lang.reflect.*;

public class RunTests {
   public static void main(String[] args) throws Exception {
      int passed = 0, failed = 0;
      for (Method m : Class.forName(args[0]).getMethods()) {
         if (m.isAnnotationPresent(Test.class)) {
            try {
               m.invoke(null);
               passed++;
            } catch (Throwable ex) {
               System.out.printf("Test" + m +"failed:" +ex.getCause());
               failed++;
            }
         }
      }
      System.out.printf("Passed:" + passed + ", Failed" + failed);
   }
}


Ругается вот на это:
Код

      for (Method m : Class.forName(args[0]).getMethods()) {

PM MAIL   Вверх
Resilient
Дата 23.6.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Понял что написал глупость)))
Но возникло 2 вопроса. 
Код

    for (Method m : Class.forName(args[0]).getMethods()) {


1) Как сделать, чтобы тут вместо нужного на самом деле "Foo" это оно подставлялось само, если этот mail внутри самого Foo?

2) Как получить.. ну скажем массив полей с аннотациями чтобы потом можно было обращаться к этим полям?
Т.е. можно ли как-то, не написав Foo.m1(), добиться чтобы оно само вызвалось? 

Это сообщение отредактировал(а) Resilient - 23.6.2009, 16:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.