2011-08-09 9 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

私は通常、ソースコード順でメソッドを返すこれらのメソッドを見ていますが、あなたが指摘したように**仕様で保証されていません**。そして、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