Я пишу пользовательский метод кроссплатформенной сериализации, который поддерживает пользовательские типы (стандартные типы - строки, числа, карты, списки и т. Д.), Аннотируя класс следующим образом:
@CompactTypeName("myapp.BetweenFilter")
public static class BetweenFilter implements NumericFilter {
static {
CompactSerializer.registerClass(BetweenFilter.class);
}
...
@SuppressWarnings("unused")
@Deserialize
private static BetweenFilter compactRead(DataInputStream ins) throws IOException {
return new BetweenFilter(ins.readInt(), ins.readInt());
}
@SuppressWarnings("unused")
@Serialize
private void compactWrite(DataOutputStream ous) throws IOException {
ous.writeInt(from);
ous.writeInt(to);
}
}
Проблема в том, что статический инициализатор создает зависимость времени выполнения от компонента сериализации, чего нет у других компонентов (аннотации, отсутствующие во время выполнения, игнорируются).
Чтобы решить эту проблему, вместо регистрации класса с помощью CompactSerializer
, сериализатор должен каким-то образом найти класс и связать его с данным именем типа ( "myapp.BetweenFilter" ) .
Как я могу это сделать? Я знаю, что это возможно, поскольку Spring-MVC, например, может автоматически находить классы с @Controller
.