有没有可能以某种方式迭代对象的每个方法,名称以“get”开头?我想比较两个非常复杂的自定义对象,它们的字段由基于其他自定义对象的数据结构组成。我想做的是获取每个get方法的结果的哈希码,并比较每个字段是否相等。
如果不太清楚,请原谅,如果您有问题,请问。感谢任何帮助和建议
我考虑过这样的方法:
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
}
}
}
final Object r = m.invoke(o);
- LucasSeveryno
上调用方法m
并将结果分配给r
。在m.getName()
返回getXyz
的情况下,它相当于Object r = o.getXyz()
。 - Marko Topolnik看起来是涉及反射概念的东西。逆向工程对象。
也许这就是你需要的。
示例类:
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
}
}
hashCode()
或equals
的反射实现吗?你不能让你的IDE自动生成它们吗? - Louis Wasserman