迭代名称以“get”开头的所有方法 - 比较对象

2022-09-04 06:45:48

是否有可能以某种方式迭代对象的每个方法,名称以“get”开头?我想比较两个非常复杂的自定义对象,它们具有由基于其他自定义对象的数据结构组成的字段。我想做的是获取每个 get 方法结果的哈希码,并比较它们是否相等的每个字段。

抱歉,如果不是很容易理解,如果你有问题,请问。感谢您的任何帮助和建议

我想到了这样的事情:

for(method m : gettersOfMyClass){ 
boolean same = object1.m.hashCode() == object2.m.hashCode() 
} 

答案 1

是的,这是可能的,事实上它很简单:

public static void main(String[] args) throws Exception {
  final Object o = "";
  for (Method m : o.getClass().getMethods()) {
    if (m.getName().startsWith("get") && m.getParameterTypes().length == 0) {
      final Object r = m.invoke(o);
      // do your thing with r
    }
  }
}

答案 2

看起来像一些处理反射概念的事情。对对象进行逆向工程

也许这就是你需要的

示例类 :

class Syndrome{
public void getMethod1(){}
public void getMethod2(){}
public void getMethod3(){}
public void getMethod4(){}
}

主要方法:

Syndrome syndrome = new Syndrome();

Method[] methods = syndrome.getClass().getMethods();

for( int index =0; index < methods.length; index++){

if( methods[index].getName().contains( "get")){
    // Do something here
}

}