1

Can Agents in AnyLogic be marked as abstract? If so, how? I'm trying to inherit certain methods from an Agent, but not others as it makes no sense for the parent Agent to have them implemented.

4

1 に答える 1

2

GUI で設計されabstractた Agent では何も (クラスまたはメソッド (AnyLogic 関数)) を宣言できませんが、Agent をユーザー定義の Java クラスとして作成することはできます (つまり、[新規] --> [Java クラス] を使用) 。そのためには、AnyLogic が文書化していない適切なコンストラクター シグネチャを知る必要があります (ただし、任意のエージェントに対して生成された Java コードを表示することで、十分に簡単に確認できます)。したがって、次のようなものが必要になります (使用されないように見えるデフォルトのコンストラクターに注意してください)。abstract

public abstract class MyAbstractAgent extends Agent
                                implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * Constructor in form required for an Agent subclass to be instantiated and for
     * superclass instantiation (as gleaned from looking at Java source of
     * visually-created Agents)
     */
    public MyAbstractAgent(Engine engine,
                           Agent owner,
                           AgentList<? extends MyAbstractAgent> collection) {

        super (engine, owner, collection);

    }

    /*
     * Simple constructor as now included in all AnyLogic 7 generated Agent code. Don't
     * understand when this would be invoked cf. the others so let's assert that we 
     * don't think it should
     */
    public MyAbstractAgent() {

        throw new AssertionError("Not expecting simple constructor to be used!");

    }

    // Using package visibility (the default for GUI-designed functions)
    abstract specialAbstractFunction();

}

ただし、おそらく非抽象メソッドを混在させたいので、これらを GUI 設計のエージェント (上記のクラスextends MyGUI_Agentまたは類似のクラス) に含めることが望ましいですが、これは、抽象メソッドだけを持つ抽象エージェント (およびしたがって、1 つの「不要な」レベルの継承)。

別の方法は、任意のサブクラス Agent で必要とされる (オーバーライドされた) メソッドに実行時の適合を強制することによって、単に抽象クラスを「概算」することです。親でrequired-in-subclass-Agent関数を次のように定義するだけです:

throw new IllegalStateException("Subclass must implement specialAbstractMethod()");

(または、より良いのは、独自のものMissingRequiredOverrideExceptionまたは類似のものを投げることです)。純粋主義者向けではありませんが、他の方法でもありません。

于 2014-11-25T00:28:15.940 に答える