Java のisAssignableFrom
メソッドを使用して、プログラム内のイベントを呼び出す一種の動的メソッドを作成しています。Class<?>
つまり、とオブジェクトの配列が与えられMethod
、与えられたパラメーターを使用してメソッドを呼び出せるかどうかを判断する必要があります。
ほとんどの場合はisAssignableFrom
機能しますが、オートボクシングという特定の問題に遭遇しました。たとえば、メソッドが を取り、を含むint
とします。現実的には、Java はそのような呼び出しの発生を許可しますが、false を返します。現在、次のように静的ヘルパー メソッドを使用してこれを解決しました。Class<?>[]
Integer.class
int.class.isAssignableFrom(Integer.class)
public static boolean isAssignable(Class<?> a, Class<?> b) {
if (a.isAssignableFrom(b))
return true;
Class<?> a1 = box(a);
Class<?> b1 = box(b);
if (a1.isAssignableFrom(b1))
return true;
return false;
}
whereはクラスのボックス化された形式 ( forなど)box(Class<T>)
を返すメソッド、またはプリミティブでない場合はクラス自体を返します。Integer.class
int.class
私の質問は次のとおりです。より良い方法はありますか? 私が使用している方法は回りくどく、やや面倒です。誰もがよりクリーンで簡単なアプローチを持っていますか?