2

私の質問はあまり明確ではないと思います:)ここに私の問題があります(詳細):

私はいくつかのオブジェクト(objA、objB、objCなどとしましょう)を持っていますが、これらは異なるクラス(それぞれClassA、ClassB、ClassCなどとしましょう)のインスタンスです。

これらのオブジェクト A、B、C、... は同じオブジェクトを呼び出します (JsonConnector クラスのインスタンスである jsonConnector と呼びましょう)。この jsonConnector が作成されたオブジェクトの updateUI() メソッドを呼び出すようにします。

私のClassX(ClassA、ClassBなど...)クラスのコード:

JsonConnector jsonConnector = new JsonConnector(this);

私の JsonConnector クラスのコンストラクター:

private Object callingObject;

public JsonConnector(Object aCallingObject) {

 callingObject = aCallingObject
}

私の JsonConnector クラスのどこかで、私はやりたい:

aCallingObject.updateUI();

しかし、「メソッドupdateUI()はオブジェクト型に対して未定義です」というコンパイルエラーが発生しました

私はそれをできた :

String callingClassName = callingObject.getClass().getSimpleName();

if(callingClassName == "ClassA")
{
((ClassA)aCallingObject).updateUI();
}
else if(callingClassName == "ClassB")
{
((ClassB)aCallingObject).updateUI();
}
else if...

しかし、100 個の「else if」ステートメントを書きたくないのです。

誰でも私ができる方法を知っていますか?

ありがとう !!!

4

3 に答える 3

4

インターフェイスにプログラムできると思います。

public interface GuiUpdate
{
   void UpdateUI() ;
}
//do the same for classes that updates a gui. 
public class ClassA implements GuiUpdate 

JsonConnector を制御できますか? その場合は、オブジェクト参照を挿入します。

public JsonConnector(GuiUpdate updater)

追加するには、これは、後続のメソッド、ポリモーフィズム、および最高の抽象化で次のことを簡単に実行できることを意味します。

  updater.UpdateUI() ;
于 2013-05-01T13:34:56.867 に答える
1

メソッドinterfaceを含むを作成できます。updateUI

それらのすべてのオブジェクトimplementinterface.

次に、それらをJsonConnectorusingMyInterfaceの代わりに渡しObjectます。

private CalleeInterface callingObject;

public JsonConnector(CalleeInterface aCallingObject) {

  callingObject = aCallingObject
}
于 2013-05-01T13:35:34.913 に答える
1

反射を使用できます。ただし、他の解決策がある場合は使用しないでください。

callingObject.getClass().getMethod("updateUI").invoke(callingObject);
于 2013-05-01T13:38:19.467 に答える