2010-03-30 3 views
3

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

Спасибо.

ответ

3

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

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

+1

Учебник по отражению Солнца: http://java.sun.com/docs/books/tutorial/reflect/ – BalusC

+0

@downvoter - не могли бы вы объяснить, почему этот ответ не был полезен? – Bozho

1

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

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

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

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

0

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

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/

1

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

+0

все еще, вызов 'hasCode()' возможен на каждом объекте без отражения. Если это только для этого метода - просто вызовите его напрямую. – Bozho

+0

Вы не можете вызвать hashCode из JSF ... и не размер() и т. Д. –

0

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

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