以下のコードは、簡単に問題を再現する小さな例です。だから私はデフォルト値が設定されているString型の変数を持っています。Javaのイントロスペクション - 奇妙な動作
- ゲッター文字列がreadMethodとwriteMethodなどセッターとしてゲッターを返さない
イントロスペクションをブールに変換
ドキュメントからは、型がブール値であれば、 "is"メソッドはgetよりも優先度が高くなりますが、型がStringであることを理解していますので、 "is-xxx " 方法?
public class Test {
public class Arguments {
private String test = Boolean.toString(true);
public boolean isTest() {
return Boolean.parseBoolean(test);
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(Arguments.class);
System.out.println("Getter: " + info.getPropertyDescriptors()[1].getReadMethod());
System.out.println("Setter: " + info.getPropertyDescriptors()[1].getWriteMethod());
PropertyDescriptor descr = new PropertyDescriptor("test", Arguments.class);
System.out.println("T");
}
}
これについていくつかの洞察を持っている人はいますか?
追加情報:
- 順序が結果を変更しません。 isTest()メソッドは常にreadMethodと見なされます
- isTest()の名前をbsTest()に変更する場合は、getterとsetterをreadMethodとwriteMethodとして選択します。だから "is-xxx"と関係があります。
:あなたは、次のコードでそれを自分自身を納得させることができますか?それが最初のオカレンスであるためブール値として認識され、setterがString型と一致しない可能性があります。 –
いいえ、それは意味をなさないが、明らかにそれが彼らが決めたものです(またはバグです)。あなたは、文字列とブール値を表すために停止を除いて、このことについて多くを行うことはできません:D – Dici
は私が最初のテキスト内のいくつかのより多くの情報を追加しました。注文は結果に影響を与えません。 – Quirexx