让我说我有以下课程:
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这个问题不是关于如何从反射中获取方法列表。它更多的是关于如何使用它或反射如何工作。
答案 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
希望有所帮助:)