Я хотел бы сгенерировать Id для данного Java-класса, проверив его имена полей, типы и все остальные компоненты класса, которые играют роль во время сериализации и десериализации, не обязательно сериализации Java, так как это может быть Json и т. Д. .Как сгенерировать идентификатор serialVersionUID для класса Java во время выполнения?
Генерация идентификатора должна быть повторяемой и детерминированной, если не будет изменений в типе поля или каком-либо другом компоненте класса. Я думаю, что я мог бы рекурсивно пересекать класс и генерировать что-то вроде этого, но я не хотел этого делать, если нет другого пути.
Я прочитал, что Java применяет сложную процедуру для определения serialVersionUID, если ни одна из них не объявлена. Он рассматривает членов класса, его супер интерфейсы и т. Д. Это похоже, но я хотел бы генерировать идентификаторы для не-Serializable классов.
Мой блейд-код заключается в том, что я храню объекты Java во внешнем хранилище данных, и я хотел бы включить этот ключ, сгенерированный во время выполнения, в ключ, чтобы грамотно обрабатывать неотправляемые изменения.
Eclipse может генерировать его автоматически во время компиляции. Зачем вам это нужно создавать во время выполнения? – shmosel
Вариант использования немного отличается. Это не совсем «serialVersionUID», который я ищу. Мне хотелось бы что-то подобное и что-то, что не поддерживается авторами (авторами). – phani
Алгоритм вычисления serialVersionUID описан по адресу http://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html#a4100. Разумеется, вам не обязательно следовать ему точно, но важно, чтобы поля и методы были отсортированы, так как методы отражения, такие как Class.getFields(), не гарантируют порядок, в котором возвращаются члены. – VGR