XDR:
取得する(Javaライブラリまたは中)は、Javaのいずれかの方法がありますConstructor
からClass
(代わりにスーパータイプを含め、正確な引数とパラメータタイプの一致を必要としない)与えられた引数/引数の型のために呼ばれることになることは?
つまり、私は知っているClass#getConstructor(Class<?>)
が、それだけを返すには、マッチを強要します。
例えば、次のコードはスローNoSuchMethodException
私が取得したいのに対し、Constructor
ためにA(CharSequence)
それは、私が走った場合に呼び出されるものだとして、例えば、A("")
:
public class A {
public A(Object o) {}
public A(CharSequence cs) {}
public static void main(String[] args) throws Exception {
Constructor c = A.class.getConstructor(String.class);
c.newInstance("");
}
}
私はそれが(明示的なキャスト経由など)、より具体的に作られている引数の型なしで選択することはできませんので、このようなAの方法にも潜在的に、複数のコンストラクタが一致していることを示す例外をスローすることを想像してみてください。
私はまたのために、この機能を見つけるしたいと思いMethod
秒。
ありがとうございました。
ホルガー:
あなたは使用することができますjava.beans.Expression
。
動作を実証するために:
public class A {
public A(Appendable o) { System.out.println("A(Appendable)");}
public A(CharSequence cs) { System.out.println("A(CharSequence)");}
public static void main(String[] args) throws Exception {
// calls A(CharSequence)
A a1 = (A)new Expression(A.class, "new", new Object[]{ "string" }).getValue();
// calls A(Appendable)
A a2 = (A)new Expression(A.class, "new", new Object[]{ System.out }).getValue();
// ambiguous, throws exception
A a3 = (A)new Expression(
A.class, "new", new Object[]{ new StringBuilder() }).getValue();
}
}
現在のバージョンは、問題は例外的なケースでは曖昧であることを示すものではありません。それは一致が発見されていない状況と区別はありません。
基本的な制限は、メソッドまたはコンストラクタを事前に選択することができないとして、あいまいさを解決する方法がないということです。あなたはそのための完全一致のための要件を低レベルのリフレクションに頼らなければならないでしょう。