2011-08-09 22 views
5

Olası çoğaltmaları:
Java Reflection: Getting fields and methods in declaration order
Java. Get declared methods in order they apear in source codeYansımaları kullanmak için getMethods mümkün mü?

varsayalım ben

mümkün mü bu sınıf sırayla getters yöntemleri almak zorunda?

public class ClassA { 

private String name; 
private Integer number; 
private Boolean bool; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public Integer getNumber() { 
    return number; 
} 

public void setNumber(Integer number) { 
    this.number = number; 
} 

public Boolean getBool() { 
    return bool; 
} 

public void setBool(Boolean bool) { 
    this.bool = bool; 
} 

}

ben belgelerinde

... döndürülen dizide elemanları sıralanır değil bu var

for (Method method : ClassA.class.getDeclaredMethods()) { 
    if (!(method.getReturnType().toString().equals("void"))) { 
     method.invoke(obj, new Object[0]))); 
    } 
} 

.. bu deneyin ve olmayan belirli bir sırada ...

Yani .. öyle mi? Bazı alternatif var mı yoksa sadece bir şey uygulamak zorunda mıyım?

+7

sırayla yöntemleri almakla nihai amacı nedir? – jzd

+0

I * genellikle * bu yöntemleri kaynak kodu düzeninde döndüren yöntemlere bakın, ancak belirttiğiniz gibi bu özellik ** tarafından garanti edilmez. Ve eğer JVM bu sırayla size vermezse, bununla ilgili yapabileceğiniz hiçbir şey yoktur, sadece .class' dosyasını elle ayrıştırmak dışında. –

+0

http://stackoverflow.com/questions/3148274/java-get-declared-methods-in-order-they-apear-in-source-code –

cevap

6

Her yönteme kendi numaranızı içeren bir @ işareti ekleyerek ekleyebilirsiniz. Ardından, tüm alıcı yöntemlerini alın ve Collections.sort()'u kullanarak ek açıklamaya ilettiğiniz numaraya bağlı olarak bunları sıralamak için özel sıralayıcınızı kullanın.

Örn:

@SortedMethod(100) 
public String getName() 
{ 
    return name; 
} 

@SortedMethod(200) 
public String getNumber() 
{ 
    return number; 
} 
+0

Henüz test etmedim! Ama çalışırsa, sadece mükemmel. Teşekkürler! – coffee

İlgili konular