解決できないと思う問題に直面していますが、試してみる価値はあります。次のクラスがあるとします。
package a;
public class A
{
protected A() {}
public static void staticMethod(A a) {
// ...
}
}
public class B extends A
{
public B() {}
}
B
したがって、他のパッケージからインスタンス化することはできますが、 A
. ここで、 を使用したいと仮定しますClass.getMethod
。ただし、次のようなある種の再帰フレームワークを使用しているだけです。
public Object callStaticMethod(Class c, String methodname, Object[] args)
{
Class[] signature = new Class[args.length];
for (i = 0 ; i < args.length ; ++i) {
signature[i] = args.getClass();
}
Method m = c.getMethod("methodname", signature);
return m.invoke(null, args)
}
この方法は現状のまま提供されており、残念ながら改善することはできません。次のようにメソッドを呼び出すことができます。
package b;
B b;
callStaticMethod(A.class, "staticMethod", b);
getClass()
...それが機能しないことを除いて、生成された署名は (結果に基づいて) になり、 as パラメータを取るメソッドが呼び出され{B.class}
ないためです。staticMethod
A
B
それについて知っている人はいますか?
BONUS :追加の課題として、このメソッドを使用して、null パラメーターを使用して呼び出す方法はありstaticMethod
ますか (これは、意味的にも完全に有効である可能性があります)。私は個人的に方法を見つけていません。