Search
Write a publication
Pull to refresh

Comments 16

теперь даже не знаю, есть ли смысл в toString() выводить hashCode.

Есть конечно, дефолтный toString() часто используется для логирования, с помощью хеша можно сразу увидеть в логах один это объект или миллион разных, но того же типа.
Можно также отметить, что там выводится не identityHashCode. Если вы переопределили hashCode, но оставили toString, будет использоваться ваш hashCode. Хотя, конечно, лучше в любых классах переопределять toString.
UFO landed and left these words here
Довольно интересно, хотя я не знаю метода сделать это не нарушая лицензию добавить свои методы java.lang.Object. Мои эксперименты показали, что final методы добавить довольно просто, а вот с не-final возникают трудности, из-за того, что отступы в таблице виртуальных методов зашиты в jvm.
Через DCEVM (это патченная/хаченная JVM из OpenJDK) можно redefineClasses на java/lang/Object сделать. Там даже тест такой был, но он оказался несколько, гм, нестабильным, так как последствия такого расползаются по всей JVM.

Ну т.е DCEVM-то про другое, про перегрузку в дебаге произвольных изменений в классах, но как побочный эффект можно и в java/lang/Object добавлять методы.

Делается все через стандартный API redefineClasses из java.lang.instrument.Instrumentation.

В стандаратной JVM, без DCEVM, скорее всего можно так поведение не native методов поменять.
Интересно было бы сравнить Object'ы в разных языках программирования. Java, C#, D, что там еще…
VA Smalltalk, чистый имидж.

Object methodDictionary size. "620"


Dolphin Smalltalk, для сравнения, 190 методов. Даже и не знаю, что даёт такое сравнение.
UFO landed and left these words here
Почему бы и нет? У меня есть на нём пару активных коммерческих проектов и несколько живых утилит для внутрикорпоративной среды.
Если сравнивать Object в C# (и вообще всех языках .Net платформы), то он почти такой же за исключения того что нет функций параллельного программирования, вроде wait, sleep, hold и т.п. (по-хорошему они и в Java остались как рудименты эпохи когда не было java.util.concurrent). Есть функции-аналоги Equals (и ReferenceEquals отдельно для сравнения ссылок), Finalize, GetHashCode, GetType (тот же getClass), MemberwiseClone (тот же clone), ToString.
У D минимализм судя по всему есть функции-аналоги Equals, getHashCode, compare, toString
Да, у D в Object'е есть метод factory, если правильно понимаю суть его в создание произвольного объекта по его тестовому имени.
Забавно, при при прочтении статьи глаз зацепился за слово `klass` в исходниках OpenJDK, и в качестве гипотезы я предположил, что это связано с тем, что слово `class` зарезервировано в C++, и использовать его в коде неудобно. Действительно, так и есть.
Так часто делают, хоть это и совсем неправильно. Еще часто пишется clazz
Ну лучше instanceClass. Я говорю больше про Java и ему подобные.

Я не знаю специфики C++, но в том же куске кода из статьи в двух идущих подряд линиях написано и klass и class

instanceKlassHandle super_klass;
if (super_class_index == 0) {
Ну, справедливости ради, в Open JDK instanceKlass и klass — это две разные сущности. Например, класс массива будет klass, а класс объекта — instanceKlass (подкласс klass).
Sign up to leave a comment.

Articles