2014-11-24 4 views
1

AnyLogic의 Agentsabstract으로 표시 할 수 있습니까? 그렇다면 어떻게? 난 Agent에서 특정 방법을 상속하려고하지만 다른 사람들은 Agent 부모가 구현하도록하는 것이 바람직하지 않으므로 다른 방법은 상속 받고 싶습니다.에이전트를 추상으로 표시 하시겠습니까?

+0

일부 설명 코드가 포함 된 경우 귀하의 질문에 더 나은 것입니다. –

+0

예/아니오 질문입니다. 그들은 추상적 일 수 있는가, 그렇지 않느냐? –

답변

2

당신은 아무것도 abstract (클래스 나 메소드 (AnyLogic 기능))를 선언 할 수 GUI 디자인 된 새로운 통해 에이전트,하지만 당신은 즉, 사용자 정의 Java 클래스 (같은 에이전트를 만들 수 있습니다 -> 자바 클래스)는 abstract입니다. AnyLogic이 문서화하지 않은 적절한 생성자 시그니처를 알아야합니다 (그러나 생성 된 Java 코드를 모든 에이전트에 대해보기 만하면 쉽게 볼 수 있습니다). 이들를하는 것이 바람직 할 것입니다, 당신은 아마이 아닌 추상적 인 방법으로 혼합 원하기 때문에, 그러나

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 이상의 클래스)이지만, 에 추상 메소드 (따라서 '불필요한'상속 레벨)가있는 추상 에이전트가 있어야합니다.

대체 방법은 추상 클래스를 'approximate'하는 것입니다. 런타임은 모든 하위 클래스 에이전트에서 (오버라이드 된) 메소드를 준수해야합니다. 그냥 같은로서 부모에 필요한-에-서브 에이전트 함수를 정의 :

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

(또는, 더 나은 자신을 던져 MissingRequiredOverrideException 또는 이와 유사한 것). 순수 주의자는 아니지만 다른 방법은 없습니다.

+0

필자는 AnyLogic 컨텍스트에서 (적어도 향후 유지 보수 담당자에게) 더 이해하기 쉬운 (논쟁의 대상이되는 : P) 후자의 경로를 취했습니다. 이것은 내가 찾고 있었던 바로 그 것이다 - 고맙다! –

+0

좋습니다. 나는 추상적이고 추상적이지 않은 방법을 혼합하는 것을 의미하는 것을 명확히하기 위해 '후손을 위해'사소한 편집을했다. (내가 생각하기에 이치에 맞았지만, 완벽을 위해서 ...) –

관련 문제