0

Java クラスの特定の属性のすべてのアクセサーを取得したいと考えています。いくつか試してみましたが、期待する出力が得られません。例:

public class demo {
    private String abc;

    public String getAbc() {
        return abc;
    }

    public void setAbc(String abc) {
        this.abc = abc;
    }

    public String fetchAbc() {
        return abc;
    }
}

ここでは、abc属性に 2 つのゲッターがあり、プロジェクト内で出現箇所を見つけたいと考えています。BeanInfo API を使用する次のコードを試しましたが、1 つのアクセサーしか得られません。

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

public class BeanDemo {

    public void myMethod() throws IntrospectionException {
        BeanInfo beanInfo = Introspector.getBeanInfo(demo.class);

        for (PropertyDescriptor property : beanInfo.getPropertyDescriptors()) {
            //all attributes of class.
            property.getReadMethod(); // getter
            property.getWriteMethod(); // setter
        }
    }
}

これを達成するために使用できる別の API があるかどうか、誰にもわかりますか? リフレクションで遊ぶことはできますが、それは適切な方法ではありません。ありがとう。

4

3 に答える 3

0

リフレクションは、メソッドの名前とシグニチャのみを調べます。メソッドが実際に何をするかは調べません。それで、それに基づいて get/set を確実に識別できますか?

aaa、bbb などのすべてのフィールドを識別し、署名がアクセサのように見え、名前に aaa または bbb などを含むすべてのメソッドを探すことができます。 bbbFetcher() も含まれていますが、これらのいずれかが本当に探しているものであるかどうかはわかりません。ソースをスキャンしたとしても、それはトリッキーです: 考えてみてください

getMagnitude() { return squareRoot( x squared plus y squared) } 

それはゲッターですか?

結論: フィールド名とメソッド名のパターン マッチングによって候補が得られますが、ニーズに合ったマッチング ルールを考案する必要があります。

于 2013-04-03T04:50:44.460 に答える