0

私はすべてフォームの関数を実装する同様のクラスのセットを持っています

public static ClassA convertToClassA(Obj A)

public static ClassB convertToClassB(Obj B)

Objクラスのリストをループして、各クラスで引数を 1 つ取るこの関数を呼び出したいと思います。各関数の名前が異なる場合、これを行うにはどうすればよいですか?

助けてくれてありがとう。

4

3 に答える 3

3
Class cls = Class.forName("ClassA");
String methodName = "convertTo" + cls.getSimpleName();
Method method = cls.getDeclaredMethod(methodName, new Class[]{Obj.class});
// If the underlying method is static, then the first parameter is ignored. It may be null as illustrated below. 
method.invoke(null, your_object);
于 2013-10-30T10:05:15.713 に答える
1

メソッド シグネチャを使用して共通のインターフェイスを作成し、呼び出し可能なクラスにそれを実装させます。後で、オブジェクトをインターフェイスのインスタンスとして反復処理し、そこからメソッドを呼び出すことができるので問題ありません。 ただし、メソッドの名前をまったく知らずにメソッドを呼び出したいと考え始めています-ターゲットメソッドの唯一の知識は、引数の数とタイプです。確かにリフレクションでは不可能ですが、同様のメソッドシグネチャが存在する場合は不正確になります。とにかく、あなたが何をしようとしているのかわかりませんが、あなたのプロジェクトは最初からうまく設計されていません (インターフェースがない、貧弱な inharitance などだと思います)。

于 2013-10-30T09:11:32.887 に答える
0

リフレクションパッケージを見てください。インスタンスが提供するすべてのメソッドを取得するメソッドを提供します。

Apache Common の BeanUtil ( http://commons.apache.org/beanutils ) も、同様のことを行ういくつかの util メソッドを提供します。

于 2013-10-30T08:56:08.657 に答える