powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
25 сообщений из 72, страница 1 из 3
Как посчитать хеш класса ?
    #40048887
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Ну то есть я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Код: java
1.
2.
3.
4.
5.
6.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;
    ...
 
}



Можно конечно самому написать через рефлекшн, но может есть что-то готовое уже?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048911
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Строки иммутабельные и не являются ссылками.
Код: java
1.
2.
3.
4.
String s = "abc";
String s1 = s;
s = "ab";
System.out.println(s1); //--> abc


Идея изначально провальная, давай заново.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048915
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
отом где-то кто-то добавил новое поле в MyOtherClass

Разве поля не определяются на этапе компиляции? Если ты хочешь добавлять их в рантайме, то тебе не нужна java, возьми какой-нибудь динамический [недо]язычок. Вон, на js, по идее, можно такое провернуть через прокси и какой-нибудь объект с иерархией.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048920
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

я и не собирался добавлять поля в рантайме. С чего ты взял?


Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Нужно явно его заставить проверить, что он не сломает ничего.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048922
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
речь идёт о чем то типа java.io.ObjectStreamClass#computeDefaultSUID
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048924
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
я и не собирался добавлять поля в рантайме. С чего ты взял?

С того, что ты написал:

questioner
Потом где-то кто-то добавил новое поле

>новое поле
>поле
>добавил

questioner
Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис.

Так для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048925
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerialVersion UUID .
Считает его утилита serialver (JDK) или метод класса ObjectStreamClass .
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048926
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Вижу, есть проблемы с причинно следственной связью. Додумываешь слова. Про рантайм от меня вообще речи не было
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048927
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Почему нельзя просто посчитать хэш класса?
Код: java
1.
2.
3.
4.
Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);


(дисклаймер: код взял первый попавшийся со стековерфлоу - улучшайте сами)

Еще можно паковать в JAR с цифровой подписью и проверять ее
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048929
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
SerialVersion UUID .
Считает его утилита serialver (JDK) или метод класса ObjectStreamClass .


Я это уже собственно и упомянул.

у меня есть пара вопросов:

1. Будет ли эта штука возвращать одно и то же число и на винде и на маке и на линуксе ?
2. Будет ли эта штука возвращать одно и то же число на java 8 9 10 11... ?
3. Я так понимаю она не учитывает изменение в поле MyOtherClass при подсчёте для MyClass, а надо, чтобы учитывала
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048932
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048933
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

А че не ответил?
авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048934
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner,

А че не ответил?
авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.

Это оффтоп. Можем в другом топике обсудить, если есть желание
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048935
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Все многообразие ссылок на классы ты не учтешь.
Задача странная. Делай руками и уходи.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048938
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти

- ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048939
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
questioner,

А че не ответил?
пропущено...

Это оффтоп. Можем в другом топике обсудить, если есть желание

Мне не надо. Я за версту чую странные желания осчастливить мир со словами НА ЛЮБУЮ и ЛЮБЫЕ
авторлюбом его поле на любую глубину
А если у тебя сериализация то там POJO классы.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048945
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
questioner

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти

- ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед)


Вот я тоже думаю, что придётся писать ограниченный своими нуждами трёхколёсный лисопед. Надеялся, что кто-то написал уже полноценный байк)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048946
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048953
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали. Твой маркер будет меняться на каждый чих.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048965
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали.


Зачем тебе это?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048967
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
+1
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048970
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
пропущено...
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали.


Зачем тебе это?

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048971
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.


Согласен - мысли такие же...

По поводу "трекать":

Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать.

Миграция исторических данных остаётся за скобками этого топика.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048972
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner
пропущено...


Зачем тебе это?

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?


Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения.
...
Рейтинг: 0 / 0
25 сообщений из 72, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]