Foo
と2つのクラスがあるとしBar
ます。それらは同じクラス(クラスを除くObject
)を拡張したり、同じインターフェースを実装したりしません。ただし、どちらにも同じ署名のメソッドがあります。これらのクラスは私のものではありません。変更することはできません。meth
これらの2つのクラスが同じクラスを拡張するか、同じインターフェイスを実装するかのように、メソッドのある種の一般的な呼び出しを使用する方法はありますか?
class Foo {
public void meth(String s) {
}
}
class Bar {
public void meth(String s) {
}
}
リフレクションは使用できますが、タイプセーフではありません。オブジェクトのランタイムに応じて、特定のメソッドを呼び出すことができます。
import java.lang.reflect.Method;
try
{
Object f1 = new Foo();
Object f2 = new Bar();
Class c1 = f1.getClass();
Class[] param = new Class[1];
param[0] = String.class;
Method method;
method = c1.getDeclaredMethod("meth", param);
method.invoke(f1, "$$$$$$$$$$$$$$");
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加