如何迭代类的方法,然后迭代返回的对象并调用另一个方法?

时间:2016-06-24 16:17:14

标签: java reflection

让我说我有以下课程:

public class ExampleList{
  // fields

  List<A> getAList(){}
  List<B> getBList(){}
  List<C> getCList(){}
  //A, B and C all extends class X with field num
}

public class Example{
  ExampleList getExampleList(){}
}

public class Test{
  main(){
    Example example = //from somewhere I get object;

    List<A> lA = example.getExampleList().getAList();
    List<B> lB = example.getExampleList().getBList();
    List<C> lC = example.getExampleList().getCList();

    //Currently I am doing
    if(lA != null) { 
      //iterate and call getCount(num)

    if(lB != null) { 
      //iterate and call getCount(num)

    if(lC != null) { 
      //iterate and call getCount(num)

  }

  getCount(int num) { //do something }
}

我想要做的是动态迭代ExampleList的所有方法,只调用一次getCount(num)。像:

main(){
  for ( Methods mList : Methods)
     for ( X x: mList )
       getCount(x.getNum);
}

我知道我可以创建一个泛型方法,它接受任何扩展X的列表,我可以在那里迭代每个List并调用getCount()。但我也希望能够迭代一个类的方法。有没有办法实现这个目标?

我知道我可以通过反射获得getter方法列表。但我不知道如何在这种情况下使用它。

BTW这个问题不是关于如何从反射中获取方法列表。它更多的是关于如何使用它或反射如何工作。

1 个答案:

答案 0 :(得分:0)

迭代给定类的方法:

    // Get the instance of the class
    X instance = X.class.newInstance();
    // Run through all methods of the class
    for(Method m : instance.getClass().getDeclaredMethods()) {
        // The first parameter of invoke is an instance of X
        // The second parameters are the parameters to pass to the method
        m.invoke(instance, new Object[]{});
    }
    // do the call to getCount
    getCount();

如果你有一个List&lt; X>只需多次调用。

使用反射时,起点为https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

希望有所帮助:)