2015-05-19 5 views
2

Работа над проектом GWT (2.7.0), я испытал очень странное поведение кода клиента.GWT Arrays.asList не работает с типами интерфейсов

Следующий код генерирует ошибку "СИЛЬНЫЙ: (ReferenceError): Ljava_io_Serializable_2_classLit_0_g $ не definedcom.google.gwt.core.client.JavaScriptException: (ReferenceError): Ljava_io_Serializable_2_classLit_0_g $ не определен".

Ошибка при вызове Arrays.asList() с параметром, который имеет тип интерфейса. Является ли это ожидаемым поведением или ошибкой GWT?

// Working 
Integer n1 = 1; 
Arrays.asList(n1); 
// Not working 
Serializable n2 = 1; 
Arrays.asList(n2); 

ответ

1

Режим сверхвысокого режима GWT 2.7 (и от _g$ в вашем классе буквального поля, я думаю, это то, что вы используете), было обнаружено, что есть другие проблемы, подобные этому, но при компиляции проблемы уходят.

Если это действительно то, что вы видите, этот вопрос, кажется, фиксируется в 2,8, но не выпустили: https://groups.google.com/d/topic/google-web-toolkit/RzsjqX2gGd4/discussion

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

0

Ну, типичное использование Arrays.asList будет

Object myObj = new Object(); 
List theList = Arrays.asList(new Object[] {myObj}); 

Это работает в GWT с любым типом интерфейса/класса/Enum вы бросаете на нее.

EDIT: Я проверил это с помощью GWT 2.5.1:

public class Foo implements EntryPoint {  

    public static interface MyInterface { 
    } 

    public static class MyObject implements MyInterface { 
    } 

    public void onModuleLoad() { 
    MyInterface myObject = new MyObject(); 
    List<MyInterface> myList = Arrays.asList(myObject); 

    } 

} 

Не возможно, что проблема лежит где-то еще?

+0

Да, это работает, потому что «Объект» не является интерфейсом. Я знал об этом обходном пути, но я не ищу обходного пути – saasraily

+0

@ Пример: Я пробовал, и он действительно работает. Но он не работает с Serializable. Очевидно, проблема возникает только тогда, когда интерфейс широко используется или реализуется GWT. Нерабочие интерфейсы, например: Runnable, HasText, HasCell – saasraily

+0

Aha! Я просто помню, что Serializable в GWT не имеет большой совместимости, попробуйте использовать IsSerializable, если это возможно. Если вы хотите больше узнать об этом, прочитайте http://www.gwtapps.com/doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.SerializableTypes.html –

Смежные вопросы