Утилита отражения Java - PullRequest
       8

Утилита отражения Java

3 голосов
/ 30 марта 2010

Есть ли утилита для получения свойства, для которого нет префикса get от объекта с использованием отражения, подобного BeanUtils? например если я укажу «hashCode» и хочу получить значение object.hashCode ().

Спасибо.

Ответы [ 5 ]

3 голосов
/ 30 марта 2010

Вы можете звонить hashCode() на каждый Object. Вам не нужно размышление для этого.

В противном случае вы можете использовать стандартные классы отражения - java.lang.Class и его метод getMethod(..), который возвращает java.lang.reflect.Method.

1 голос
/ 30 марта 2010

org.apache.commons.beanutils.MethodUtils - это то, что я искал.

1 голос
/ 30 марта 2010

API отражения java позволяет получить доступ к любому свойству данного экземпляра класса, включая приватные переменные.

Отражение - это мощный инструмент, который позволяет вам делать множество вещей, включая создание экземпляров объектов с помощью частных конструкторов.

Вот достойное руководство для размышлений о том, что появился быстрый поиск в Google.

http://tutorials.jenkov.com/java-reflection/index.html

0 голосов
/ 30 марта 2010

Есть ли утилита для получения свойства, для которого нет префикса get от объекта с использованием отражения, подобного BeanUtils?

Существуют стандартные API отражения, но то, что вы просите, проблематично. Соглашение Бина состоит в том, что метод, начинающийся с get или is (и некоторых других характеристик), является свойством. Без этого соглашения невозможно узнать, какие из методов класса являются получателями свойств (или установщиками), а какие - методами, которые имеют совершенно другое назначение. Например, вы НЕ хотите вызывать File.delete() из-за ошибочного убеждения, что это был получатель для какого-то boolean свойства !!

0 голосов
/ 30 марта 2010

Поиск полей класса : можно узнать, какие поля данных определены в классе. Для этого можно использовать следующий код:

   import java.lang.reflect.*;

   public class field1 {
      private double d;
      public static final int i = 37;
      String s = "testing";

      public static void main(String args[])
      {
         try {
            Class cls = Class.forName("field1");

            Field fieldlist[] 
              = cls.getDeclaredFields();
            for (int i 
              = 0; i < fieldlist.length; i++) {
               Field fld = fieldlist[i];
               System.out.println("name
                  = " + fld.getName());
               System.out.println("decl class = " +
                           fld.getDeclaringClass());
               System.out.println("type
                  = " + fld.getType());
               int mod = fld.getModifiers();
               System.out.println("modifiers = " +
                          Modifier.toString(mod));
               System.out.println("-----");
            }
          }
          catch (Throwable e) {
             System.err.println(e);
          }
       }
   }

источник: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...