8

ソフトウェアを自動化する「マクロ」に使用されるJava APIを使用しています。API には、とりわけ、クラスSimulation(ある種のグローバル状態) とFunctionManager. これらのクラスを変更するためにできることは何もありません。

後者にはいくつかの便利な機能がないため、BetterFunctionManagerクラスを作成したいと思います。しかし、直接インスタンス化できないextends FunctionManagerため、これを行う方法がわかりません。FunctionManager次のように から取得する必要がありますSimulation

Simulation simulation = getCurrentSimulation();
FunctionManager functionManager = simulation.getFunctionManager();

Simulation直接インスタンス化することもできないことに注意してください。経由で取得する必要がありますgetCurrentSimulation()(現在のシミュレーションは、実行時にマクロ インタープリターによって決定されます)。

落ち込むことはできません。以下は ClassCastException をスローします。

BetterFunctionManager betterFunctionManager = simulation.getFunctionManager();

どうすれば構築できBetterFieldFunctionManagerますか?

4

3 に答える 3

2

あなたが見つけたものはThe Expression Problemとして知られています。純粋なJavaでそれを攻撃するための最も合理的なオプションは、構成と委譲を使用するStinePikeの提案です。

タスクに適したツールを選択する立場にある場合は、 Clojure Protocolsを参照することをお勧めします。彼らは式の問題に対する本当に素晴らしい解決策を提供します(ここで非常に良い説明を参照してくださいClojureで式の問題を解決する)、もしあなたが解決策をclojureでコーディングすることになった場合、私が間違っていなければ、それを Java .class にコンパイルして使用することができますあなたのJavaアプリで

于 2013-05-29T15:02:38.773 に答える
1

クラスの構造上選択肢が限られているため、BetterFunctionManager の代わりに FunctionManagerUtility クラスを作成してみてはいかがでしょうか。FunctionManagerUtility クラスでは、 FunctionManager オブジェクトを入力として取得することにより、便利な機能を追加するメソッドを追加できます。

于 2013-05-29T12:49:36.760 に答える