|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Ну то есть я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Код: java 1. 2. 3. 4. 5. 6.
Можно конечно самому написать через рефлекшн, но может есть что-то готовое уже? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 11:59 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Строки иммутабельные и не являются ссылками. Код: java 1. 2. 3. 4.
Идея изначально провальная, давай заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 12:57 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner отом где-то кто-то добавил новое поле в MyOtherClass Разве поля не определяются на этапе компиляции? Если ты хочешь добавлять их в рантайме, то тебе не нужна java, возьми какой-нибудь динамический [недо]язычок. Вон, на js, по идее, можно такое провернуть через прокси и какой-нибудь объект с иерархией. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:01 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, я и не собирался добавлять поля в рантайме. С чего ты взял? Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Нужно явно его заставить проверить, что он не сломает ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:08 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
речь идёт о чем то типа java.io.ObjectStreamClass#computeDefaultSUID ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:10 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner я и не собирался добавлять поля в рантайме. С чего ты взял? С того, что ты написал: questioner Потом где-то кто-то добавил новое поле >новое поле >поле >добавил questioner Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Так для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:14 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, Вижу, есть проблемы с причинно следственной связью. Додумываешь слова. Про рантайм от меня вообще речи не было ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Почему нельзя просто посчитать хэш класса? Код: java 1. 2. 3. 4.
(дисклаймер: код взял первый попавшийся со стековерфлоу - улучшайте сами) Еще можно паковать в JAR с цифровой подписью и проверять ее ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Я это уже собственно и упомянул. у меня есть пара вопросов: 1. Будет ли эта штука возвращать одно и то же число и на винде и на маке и на линуксе ? 2. Будет ли эта штука возвращать одно и то же число на java 8 9 10 11... ? 3. Я так понимаю она не учитывает изменение в поле MyOtherClass при подсчёте для MyClass, а надо, чтобы учитывала ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:21 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Kachalov, те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:30 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, А че не ответил? авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:33 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner, А че не ответил? авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. Это оффтоп. Можем в другом топике обсудить, если есть желание ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:34 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, Все многообразие ссылок на классы ты не учтешь. Задача странная. Делай руками и уходи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:37 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти - ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:42 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp questioner, А че не ответил? пропущено... Это оффтоп. Можем в другом топике обсудить, если есть желание Мне не надо. Я за версту чую странные желания осчастливить мир со словами НА ЛЮБУЮ и ЛЮБЫЕ авторлюбом его поле на любую глубину А если у тебя сериализация то там POJO классы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:42 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Kachalov questioner те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти - ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед) Вот я тоже думаю, что придётся писать ограниченный своими нуждами трёхколёсный лисопед. Надеялся, что кто-то написал уже полноценный байк) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:52 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Если тебе не надо, то к чему вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:53 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp, Если тебе не надо, то к чему вопрос? Убедился))) Тебе верно сказали. Твой маркер будет меняться на каждый чих. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:02 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:03 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner PetroNotC Sharp, Если тебе не надо, то к чему вопрос? Убедился))) Тебе верно сказали. Зачем тебе это? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:19 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp пропущено... проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий. Убедился))) Тебе верно сказали. Зачем тебе это? Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:21 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:23 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner пропущено... Зачем тебе это? Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:24 |
|
|
start [/forum/topic.php?fid=59&msg=40048934&tid=2120515]: |
0ms |
get settings: |
24ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
638ms |
get tp. blocked users: |
2ms |
others: | 292ms |
total: | 1044ms |
0 / 0 |