2017-01-11 9 views
3

У меня есть проект Java, и теперь я также хочу использовать этот код для проекта GWT, поэтому мне не нужно писать один и тот же код дважды. Проблема в том, что некоторые классы недоступны в gwt, например java.awt.geom.Rectangle2D.Double.Классная оболочка, расширяющая различные базовые классы

Я думал о создании класса-оболочки RectangleWrapper, который будет распространять либо стандартный класс Rectangle, либо версию gwt того же класса.

В общем коде я заменил бы все мои Rectangle2D.Double с моим Rectangle и в зависимости от конечного булева моего класса-оболочки (compiler flags java) будет либо простираться на или другой классе Rectangle.

Это возможно даже, или есть лучший способ сделать это

ответ

1

Я просто взял один из моих GWT-проектов на стороне клиента классов и добавлены следующие строки:

if (false) { 
     String a = StringEscapeUtils.escapeHtml("lalala"); 
    } 

Это, очевидно, компилируется нормально, но когда я запускаю приложение GWT я получаю это:

ERROR: Errors in 'file:/C:/gwtproject/src/main/java/package/ClientSideClass.java' 
    ERROR: Line 119: No source code is available for type org.apache.commons.lang.StringEscapeUtils; did you forget to inherit a required module? 

Таким образом, ответ будет нет, вы не можете использовать оболочку, как это.

Есть ли другой способ достижения этого? Я очень сомневаюсь в этом.
Одной из основных особенностей GWT является замена старых графических компонентов рабочего стола AWT/Swing на весь набор компонентов веб-интерфейса, предназначенных для совместимости с Javascript; нет никакого смысла в том, чтобы старые компоненты были доступны или поддерживались каким-либо образом.

Если вы говорили об библиотеках служебных программ, таких как Apache Commons, я мог бы рекомендовать вам вместо этого использовать RPC-вызов (клиентская сторона вызывает серверную сторону, где вы можете использовать все, что вам нравится, и возвращать результаты асинхронно), но это не тот случай.