代码之家  ›  专栏  ›  技术社区  ›  OscarRyz

java.lang.reflect包周围是否有java反射API?

  •  2
  • OscarRyz  · 技术社区  · 16 年前

    许多Java项目都使用反射。我想知道是否有一个反射库可以利用 java.lang.reflect 更容易的。

    我们可以像这样使用它:

     Reflected object = new Reflected( new Object() {
            String name="Oscar";
            String lastName="Reyes";
            String reverseName(){
                return new StringBuilder(name+lastName)
                    .reverse()
                    .toString();
            }
            int nameLength() {
                return (name+lastName).length();
            }
        });
        String name = object.getString("name");
        object.set("name", "Mr. Oscar");
        String reversed = ( String ) object.exec("reverseName");
        int count       = ( Integer ) object.exec("nameLength");
    

    .... 
    UnknownLibraryObject reflectionMadeEasy 
             = new UnknownLibraryObject( .... );// initialize with an object from somewhere 
    
    String someString = ( String ) reflectionMadeEasy.get("stringPropertyFromTheReflectedObject");
    int someInteger   = ( String ) reflectionMadeEady.execute("someMethodFromReflectedObject", 1,2,3 );// with args.
    

    7 回复  |  直到 15 年前
        1
  •  6
  •   skaffman    16 年前

    不清楚你想做什么,但是 Apache Commons Lang MethodUtils , FieldUtils ConstructorUtils

    正如@Lauri所指出的, Commons BeanUtils 还提供了更多高级功能,例如在对象之间复制特性。

        2
  •  2
  •   user207421    16 年前

    另请参见java.beans.Expression和java.beans.Statement。

        3
  •  2
  •   Cem Catikkas    15 年前

    ApacheCommonsLang非常直截了当。还有 Whitebox

    1. 使用Whitebox.setInternalState(..)来 班
    2. getInternalState(..)以获取 班
    3. 使用Whitebox.invokeMethod(..) 调用
    4. 使用 Whitebox.invokeConstructor(..)到 创建具有

    我更喜欢它而不是ACL,因为您不必对 static 字段和方法的不确定性。

        4
  •  2
  •   iirekm    8 年前

    最方便的是 jOOR

    Reflect.on(anyObject).field("stringPropertyFromTheReflectedObject").get() Reflect.on(anyObject).call("someMethodFromReflectedObject", 1,2,3).get()

        5
  •  1
  •   laher    16 年前

    Spring框架包含一些帮助程序,与Commons Lang/BeanUtils并没有太大区别。。。

    http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/ReflectionUtils.html

    http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/BeanUtils.html

    这两个类都标记为“仅供内部使用”,但仍然值得一看。

    您甚至可能会发现,您真的在寻找一个像Spring这样的框架来管理您的对象。。。嗯

        6
  •  1
  •   Stephen C    16 年前

    Java主要被设计为一种静态类型的语言,以这种方式使用时效果非常好。虽然动态键入和(特别是)反射可以帮助您解决难题,但通常最好限制它们的使用,因为:

    • 它们会降低性能,
    • 它们使您的源代码更复杂,可读性更低,并且
    • 它们使您的代码更加脆弱。

    解决所有问题。。。但是,如果没有更多关于为什么要进行这么多反思性编程的信息,就不清楚它们是否相关。)

        7
  •  1
  •   Ihor Rybak    8 年前

    对于 用户。有一些实用程序类可以更轻松地使用反射:

    • org.springframework.util.ReflectionUtils
    • org.springframework.util.ClassUtils
    • org.springframework.util.TypeUtils