Java:通过反射调用第二类的方法

标签 java reflection

我有一个关于 Java 反射的问题。

以下问题: 根据配置,我想通过反射调用方法,但不仅是类 CLASS_A 的方法,而且还来自 CLASS_A< 引用的类 CLASS_B 的方法/strong>.

但我想始终仅使用类 CLASS_A 来访问该属性。

这是我的意思的一个例子:

public class Foo
{
   private String _name;
   private Bar _bar;
   public Foo(String name, Bar bar)
   {
      _name = name;
      _bar = bar;
   }

   public String getName()
   {
      return _name;
   }

   public Bar getBar()
   {
     return _name;
   }
}

public class Bar
{
   private String _name;

   public Bar(String name)
   {
     _name = name;
   }  

   public String getName()
   {
     return _name;
   }
}

我想始终使用类 Foo 的实例调用 getMethod 返回的方法...无论Foo的方法是否有效应该调用或者Bar的方法.

public class Executor
{
   public static void main(String[] args)
   {
     Foo foo = new Foo("fooName", new Bar("barName"));
     String attribute = "barName";

     Method method = getMethod(Foo.class, attribute);

     try
     {
       System.out.println(String.valueOf(method.invoke(foo, new Object[]{})));
     }
    catch(Exception ex)
    {
       ex.printStackTrace();
    }
  }

 private static Method getMethod(Class< ? > clazz, String attribute)
 {
    try
    {
      if (attribute.equals("fooName"))
      {        
        return clazz.getDeclaredMethod("getName", new Class[] {});
      }
      else if (attribute.equals("barName"))
      {
        //Is that somehow possible?
        Method method = clazz.getDeclaredMethod("getBar.getName", new Class[] {});
        return method;
      }
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }

    return null;
  }
}

这样的事情可能吗? 谢谢!

最佳答案

您可以使用 Apache BeanUtils 库。

Here是一个很好的例子,展示了如何使用它。

关于Java:通过反射调用第二类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643674/

相关文章:

java - Jar 文件无法通过命令提示符或双击运行

java - 比较 Java 中的枚举

java - JSF2 : How to send a GET request from a button submitting input values?

java - 如何区分静态字段对象和非静态字段/变量对象

java - Java中的反射(区分两种类型)

java - Neo4j HA(2.0-快照),等待集群选举master超时

java - RESTeasy、JSON 和空字段

c# - 如何存储类型 A 和运行时 Func<A,B> 类型转换之间的映射?

java - 自动调用静态 block ,无需显式调用 Class.forName

c# - 如何自动添加当前程序集中的所有 EntityTypeConfiguration<>?