2011-08-09 4 views
5

가능한 중복 :
Java Reflection: Getting fields and methods in declaration order
Java. Get declared methods in order they apear in source code반사를 사용하여 getMethods를 순서대로 사용할 수 있습니까?

한다고 가정 내가

이 가능이 클래스를 위해 게터 방법을 가지고?

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

}

은 내가 문서

... 반환되는 배열의 요소가 정렬되지 않습니다에서이있어

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

.. 이것을 시도 가지고하지 않습니다 특정 순서대로 ...

그래서 .. 그게 뭐죠? 일부 대안이 존재하거나 뭔가를 구현해야만합니까?

+7

위해 방법을 얻기에 최강의 목적은 무엇인가? – jzd

+0

I * 일반적으로 * 소스 코드 순서로 메소드를 리턴하는 이러한 메소드를 참조하십시오. 그러나 언급 한대로 ** 스펙 **에서 ** 보장되지 않습니다. 그리고 JVM이 당신에게 그것을 순서대로 제공하지 않는다면'.class' 파일을 수작업으로 파싱하는 것을 제외하고는 실제로 할 수있는 일은 아무것도 없습니다. –

+0

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

답변

6

각 메소드에 번호가 포함 된 @ 주석을 추가 할 수 있습니다. 그런 다음 모든 getter 메서드를 가져오고 사용자 지정 정렬기를 사용하여 Collections.sort()을 사용하여 주석에 전달한 숫자에 따라 정렬합니다.

예 :

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

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

나는 아직 시험을하지 않았다! 그러나 작품이라면 그저 완벽합니다. 감사! – coffee

관련 문제