Мне нелегко пытаться сериализовать мой класс (буквально 3-4 часа, чтобы найти solutio). Добавить подкласс существующего сериализуемой и функционирования класса, и чем получить следующее сообщение об ошибке:GWT + сериализация
[ERROR] com.google.gwt.user.client.ui.DelegatingChangeListenerCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.google.gwt.user.client.ui.DelegatingClickListenerCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.google.gwt.user.client.ui.DelegatingFocusListenerCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.google.gwt.user.client.ui.DelegatingKeyboardListenerCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.google.gwt.view.client.ListDataProvider<T>.ListWrapper<> is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.client.rpc.ItemRecRpc.LogCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] com.client.rpc.ItemRecRpc.LogCollection has no available instantiable subtypes. (reached via com.client.rpc.ItemRecRpc)
[ERROR] subtype com.client.rpc.ItemRecRpc.LogCollection is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] java.util.AbstractList.SubList<E> is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] java.util.Collections.UnmodifiableList<T> is not default instantiable (it must have a zero-argument constructor or no constructors at all) and has no custom serializer. (reached via com.client.rpc.ItemRecRpc)
[ERROR] java.util.Collections.UnmodifiableRandomAccessList<T> is not default instantiable (it must have a zero-argument
Мой класс выглядит следующим образом:
public class ItemRecRpc implements Serializable {
private static final long serialVersionUID = -5828108890651522661L;
.
.
private String rId;
private LogCollection logColl;//if i comment this, no error message...
public class LogCollection{
public LogCollection(){
}
//public long creationTime = System.currentTimeMillis();
//public LongVector times = new LongVector();
//public ArrayList<Object> messages = new ArrayList<Object>();
//public int nSkipped = 0;
//public int nExceptions = 0;
//public Exception firstException = null;
//public long endGcTime=0;
public long endTime;
}
.
.
.
}
Когда я строка комментария «частный LogCollection logColl» его это нормально, но когда я раскомментирую, я снова получаю сообщение об ошибке. Я попытался с помощью статического ключевого слова, как вы видите я комментировать каждые переменные подклассы, но не могу помочь ... Во всяком случае, если я создать новый класс:
public class LogCollectionRpc implements Serializable {
public LogCollectionRpc() {
//
}
public long creationTime = System.currentTimeMillis();
public LongVector times = new LongVector();
public ArrayList<Object> messages = new ArrayList<Object>();
public int nSkipped = 0; // due to reaching the limit
public int nExceptions = 0; // due to MyAppender-s
public Exception firstException = null; // due to MyAppender-s
public long endGcTime = 0;
public long endTime;
}
И чем пытаться использовать это в качестве моего класса функционирования, то хорошо ... Но эта штука действительно подшучивает ...
Любая идея? Gwt не поддерживает сериализацию подкласса? Или мне что-то не хватает. Измените любой ответ.
С наилучшими пожеланиями, Питер
Это то, что @jusio говорит: внутренним не статическим классам нужен закрытый экземпляр, поэтому их конструктор получает дополнительный аргумент (при компиляции). Вот почему он жалуется на отсутствие конструктора с нулевым аргументом. В этом случае наиболее подходящим я считаю объявление LogCollection как «public static class», чтобы сделать его не связанным с типом окружения. Или напрямую переместите его в новый файл. Причина, по которой удаляется поле 'private LogCollection ... ', заключается в том, что GWT понимает, что он не нуждается в подтипе и игнорирует его. – helios
правда, но, как кажется, он также подходит, но если я напишу «реализует Serializable», GWT больше не жалуется, поэтому статичный и реализует также существенно, чтобы не жаловаться. Странно, не так ли? – czupe