Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Reflection  (Прочитано 11463 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kok
Интересующийся

ru
Offline Offline

« : 04-11-2010 12:54 » 

Привет.
Не могли бы мне помочь в описании метода...как их вбивать в set, подскажите пожалуйста....
/**
    * Метод возвращает набор имен методов для класса, помеченных идентификатором protected
    * @param clazz - класс
    * @throws NullPointerException - если claszz является null - ом
    * @return Набор имен методов
    * */   
   public Set<String> getProtectedFieldsNames(Class clazz);
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 04-11-2010 13:29 » new

kok, а кто эти загадочные "они", которые "вбиваются"?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 04-11-2010 13:57 » 

<telepathy mode="on">
подозреваю, что "они" - это имена protected-методов класса clazz. А помочь топикстартер просит с реализацией метода, для которого он предъявил здесь объявление :)
</telepathy>
Записан
kok
Интересующийся

ru
Offline Offline

« Ответ #3 : 04-11-2010 16:16 » 

почему нельзя записать метод так......в чем ошибка   
/**
    * Метод возвращает текущее значение поля для данного экземпляра,
    * имеющего идентификатор private, public, protected или default.
    * @param clazz - экземпляр класса
    * @param fieldName - имя поля класса
    * @throws NoSuchFieldException - если поля с указанным именем не существует
    * @throws NullPointerException - если fieldName or object является null - ом
    * @return Текущее значение поля
    * */
   public Object getFieldValueByName(Object p, String fieldName) throws NoSuchFieldException
   {
       Class clazz = Class.forName("getFieldValueByName"); 
         Field[] fields = clazz.getDeclaredFields();
         
      if(p == null)
         throw new NullPointerException();
      return fieldName;
      
      try
      {
         Field field = clazz.getField("id");
         System.out.println("Field name = " + field.getName());
      }
      catch(NoSuchFieldException e)
      {
         e.printStackTrace();
      }
   }
   
« Последнее редактирование: 04-11-2010 16:57 от kok » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 04-11-2010 19:11 » 

kok, вызов Class.forName("getFieldValueByName") вернет класс с именем getFieldValueByName. Очевидно, это не то, что вам нужно - вам нужно получить класс объекта p. Это делает метод p.getClass()

Вызов clazz.getField("id") дает объект для доступа к полю с именем id, а вам надо имя поля брать из параметра fieldName
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
kok
Интересующийся

ru
Offline Offline

« Ответ #5 : 04-11-2010 20:19 » 

А так....
public Object getFieldValueByName(Object p, String fieldName)
         throws NoSuchFieldException
         {
         Field field  = p.getClass().getField(fieldName);
         return fieldName;
         }
   

Добавлено через 2 минуты и 52 секунды:
сорри....так....??
public Object getFieldValueByName(Object p, String fieldName)
         throws NoSuchFieldException
         {
         Field field = p.getClass().getField(fieldName);
                        field.setAccessible(true);
                        return field.get(p);

         }
« Последнее редактирование: 04-11-2010 20:22 от X-krol-X » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 04-11-2010 21:47 » 

сорри....так....??

kok,  не надо у меня спрашивать. Надо написать тестовый пример и запустить его. Заработает - значит так. Не заработает - будем разбираться.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
kok
Интересующийся

ru
Offline Offline

« Ответ #7 : 04-11-2010 21:51 » 

В том-то и дело что не работает... Жаль
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 08-11-2010 17:23 » 

kok, что именно не работает. Какой вы написали тестовый пример, какие ошибки получили?
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines