2015-03-30 2 views
0

Похоже, статические инициализации блоки не работают в CN1, например, регистрация пользовательских externalisable класса:Codename один статический инициализации блок игнорируется

public class User { 

    static { 
     Util.register("User", User.class); 
    } 

    ... 
} 

Однако, в одном из CN1 блогов, которые я нашел, что это рекомендуемый способ для регистрации внешних классов. Не удается найти ответ в документации. Я что-то пропустил, или CN1 фактически не поддерживает статические блоки инициализации?

ответ

1

Статическая инициализация работает просто отлично.

То, что вы сделали не будет работать, хотя ... Например:

Object o = storage.readObject(...); 

Предполагая, что о является User класс еще не был инициализирован, следовательно, не статический инициализатор, нет регистра вызова и код сериализации не удастся ,

Именно поэтому мы всегда регистрируемся в методе init(Object) основного класса и никогда в статическом инициализаторе.

+0

Да, я исправил проблему с хранилищем, переместив Util.register() на метод init(). Я проверил в своей программе, и кажется, что я использую этот класс только после прочтения его из хранилища. – ruruskyi

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