2013-01-15 3 views
0

나는 많은 데이터 엔터티를 가지고 있는데 모두 Entity을 구현하고있다. 이제 이러한 엔티티 중 일부를 JavaScript 코드에 표시하고 싶지만 하나의 구현 규칙으로 인해 많은 JavaScriptObject 하위 클래스를 만들 수는 없습니다.여러 개의 하위 클래스가있는 경우 JavaScriptObject를 래핑 하시겠습니까?

이 작동
public class JsStandardScale3 implements StandardScale3 { 

    private JavaScriptObject wrapped; 

    public JsStandardScale3(JavaScriptObject wrapped) { 
     this.wrapped = wrapped; 
    } 

    @Override 
    public native Long getLicenseId() /*-{ 
     [email protected]::wrapped.getLicenseId(); 
    }-*/; 

, 그것은 작업의 단지 많은입니다 :

그래서, 난 이런 종류의 일을 사용하고 있습니다. 오버레이 유형 구조가 훨씬 좋네요. 어떤 제안?

답변

2

모든 확장이 JSO의 단일 "루트"확장자 인 경우 JavaScriptObject를 인터페이스의 여러 하위 클래스로 확장 할 수 있습니다.

예를 들어, 표준 확장 엔터티 및 코스 확장 엔터티가 있습니다.

JsStandard extends JavaScriptObject... 
JsCourse extends JavaScriptObject... 

을하지만 할 : 나는 할 수 없습니다

JsEntity extends JavaScriptObject... 
JsStandard extends JsEntity... 
JsCourse extends JsEntity... 

환상적인!

유일한 제한은 모든 메서드가 최종 오버레이로 표시되어야하며 간단한 오버레이 시나리오에서 잘 작동한다는 것입니다.

+0

두 번째 경우 생성자는 어떻게 생겼을까요? 문서에서는 오버레이 유형이 보호 된 0 인수, 빈 생성자를 가져야한다고합니다. 하지만 하위 클래스는 super의 생성자를 호출해야합니다. – Ezward

+0

서브 클래스는 보호 된 생성자를 호출 할 수 있습니다. 불행하게도 어떤 생성자에서도 인자가 없을 수도 있습니다. JavaScriptObject.create(). cast()를 사용하여 새 객체를 만드는 정적 최종 작성 메소드를 만든 다음 거기에서 모든 적절한 속성을 설정하여이 문제를 해결했습니다. –

관련 문제