Java 迭代名称以“开始”开头的所有方法;获取";-比较对象

Java 迭代名称以“开始”开头的所有方法;获取";-比较对象,java,compare,Java,Compare,是否可能以某种方式迭代对象的每个方法,名称以“get”开头?我想比较两个非常复杂的自定义对象,它们的字段由基于其他自定义对象的数据结构组成。我想做的是获取每个get方法的结果的hashcode,并比较它们对于每个字段是否相等 对不起,如果这不是很容易理解,如果你有问题,请问。谢谢你的帮助和建议 我想到了这样的事情: for(method m : gettersOfMyClass){ boolean same = object1.m.hashCode() == object2.m.hashCod

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

对不起,如果这不是很容易理解,如果你有问题,请问。谢谢你的帮助和建议

我想到了这样的事情:

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

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

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
    }
  }
}

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

也许这就是你需要的

示例类:

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
}

}
综合征=新综合征();
方法[]方法=syndrome.getClass().getMethods();
for(int index=0;index
所以您想做一些事情,比如get***()…write?…您是否试图构建
hashCode()
equals
的反射实现?有什么原因不能让IDE生成它们吗?getter-为什么不迭代所有方法并检查方法名是否以get开头?对于第一个问题-是的,通过反射。但是我认为这不是一个好的实践。嗨,你能解释一下这行代码的作用吗:final Object r=m.invoke(o);它在实例
o
上调用方法
m
,并将结果分配给
r
。在
m.getName()
返回
getXyz
的情况下,它与
Object r=o.getXyz()
等效。