2012-06-27 31 views
9

Có thể bằng cách nào đó lặp lại trên mọi phương thức của đối tượng, với tên bắt đầu bằng "get" không? Tôi muốn so sánh hai đối tượng tùy chỉnh rất phức tạp, có các trường bao gồm các cấu trúc dữ liệu dựa trên các đối tượng tùy chỉnh khác. Những gì tôi muốn làm là để có được một hashcode của kết quả của mỗi phương pháp có được, và so sánh nếu chúng được bình đẳng cho mọi lĩnh vực.Lặp lại tất cả các phương thức có tên bắt đầu bằng "get" - so sánh các đối tượng

Xin lỗi nếu nó không phải là rất dễ hiểu, nếu bạn có thắc mắc xin vui lòng yêu cầu. Nhờ sự giúp đỡ và gợi ý

Tôi nghĩ đến một cái gì đó như thế:

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

vì vậy bạn muốn làm một cái gì đó như được *** () ..write? .. – Ahmad

+1

... Bạn đang cố gắng xây dựng một bản thực thi phản chiếu của 'hashCode()' hoặc 'equals'? Có một lý do bạn không thể chỉ có IDE của bạn tạo ra chúng? –

+0

getters - http://stackoverflow.com/questions/8524011/java-reflection-how-can-i-get-the-all-getter-methods-of-a-java-class-and-invoke – ant

Trả lời

15

Chắc chắn nó có thể, và trong thực tế khá đơn giản:

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

Xin chào, bạn có muốn giải thích dòng này là gì không: đối tượng cuối cùng r = m.invoke (o); – LucasSeveryn

+0

Nó gọi phương thức 'm' trên' o' và gán kết quả là 'r'. Nó tương đương với 'Object r = o.getXyz()', trong trường hợp 'm.getName()' trả về 'getXyz'. –

+0

Cảm ơn Marko rất nhiều! Giải pháp rất hữu ích và rõ ràng! – LucasSeveryn

0

Hình như một số điều để đối phó với khái niệm phản xạ . Reverse kỹ thuật Object

Có thể đây là những gì bạn cần

Mẫu Class:

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

Phương pháp chính:

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 
} 

} 
Các vấn đề liên quan