Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Object -> String -> Object  [new]
Molasar
Member

Откуда:
Сообщений: 773
Всем привет!

Есть строковое имя объекта, получаемое через .toString()
new MyClass().toString();

Как можно обратиться к этому объекту, к его методам, через его строковое имя?
23 окт 19, 18:02    [22001162]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2463
Molasar,
Если нет ссылки на экземпляр, то никак.
23 окт 19, 18:06    [22001164]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2714
получить имя класса
сделать что угодно с помщью ReFlection API
23 окт 19, 18:49    [22001198]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
Molasar
Member

Откуда:
Сообщений: 773
PetroNotC Sharp
Molasar,
Если нет ссылки на экземпляр, то никак.


.mavenproject2.MyClass@15db9742 - такое строковое значение содержит в себе ссылку на экземпляр класса?
24 окт 19, 09:36    [22001378]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
Molasar
Member

Откуда:
Сообщений: 773
asv79
получить имя класса
сделать что угодно с помщью ReFlection API

Как получить не имя класса, а конкретный экземпляр класса?
24 окт 19, 09:37    [22001380]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
mayton
Member

Откуда: loopback
Сообщений: 42912
Если вызвать самый базовый метод toString() object, то отработает

 public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }


Тот в свою очередь вызывает хеш от

    * As much as is reasonably practical, the hashCode method defined by
     * class {@code Object} does return distinct integers for distinct
     * objects. (This is typically implemented by converting the internal
     * address of the object into an integer, but this implementation
     * technique is not required by the
     * Java™ programming language.)
     *
     * @return  a hash code value for this object.
     * @see     java.lang.Object#equals(java.lang.Object)
     * @see     java.lang.System#identityHashCode
     */
    public native int hashCode();


Как видно гарантий получения физического адреса нет.

Более перспективно КМК спросить у автора что ему собственно нужно. И можно еще почитать про
пакет com.sun.* который может содержать неофициальные методы доступа к адресному пространству хипа.
Но этот пакет не гарантируется к сохранению от версии к версии и в новых релизах Oracle может просто его
выкосить. Нужно ли автору такое или нет - тоже вопрос.
24 окт 19, 10:13    [22001395]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2463
Molasar
PetroNotC Sharp
Molasar,
Если нет ссылки на экземпляр, то никак.


.mavenproject2.MyClass@15db9742 - такое строковое значение содержит в себе ссылку на экземпляр класса?

Давай, я сначала скажу что постановка задачи - изврат.
А потом будем обсуждать теорию, можно ли по строке адреса в памяти получить экземпояр.
24 окт 19, 10:14    [22001396]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2463
mayton
Как видно гарантий получения физического адреса нет.
я даже рад этому. Чтобы ручки не тянулись.
24 окт 19, 10:16    [22001398]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2463
mayton
может просто его
выкосить.
пошло вроде еще со времен понятия управляемая память.
24 окт 19, 10:17    [22001400]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
mayton
Member

Откуда: loopback
Сообщений: 42912
PetroNotC Sharp
mayton
может просто его
выкосить.
пошло вроде еще со времен понятия управляемая память.

Есть программные продукты. Такие как Hazelcast, ApacheIgnite. Это In-memory кеши
для толстого ентерпрайза. Они написаны на Java но написаны хитро. Их логика укладывается
в managed memory. А сегмент самого кеша лежит в неуправляемой памяти. Сделано ради экономии.
И ради того чтобы GC не бегал туда. Он туда и не бегает. Не его это поле деятельности. Как с ним (с неуправляемым кешом)
работают - ХЗ. Интересующиеся могут почитать исходники этих продуктов и поискать как это работает.

Вобщем есть такой злостных хак.
24 окт 19, 10:22    [22001402]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
забыл ник
Member

Откуда:
Сообщений: 3047
Если отвечать на вопрос ТС - никак. GC может переместить объект в любое время. воппрос закрыт.
А теперь плавно переходим к вопросу - а что все-таки нужно
24 окт 19, 12:16    [22001551]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
chpasha
Member

Откуда:
Сообщений: 8594
забыл ник
А теперь плавно переходим к вопросу - а что все-таки нужно

+1 первый вопрос, который должен задаваться при каждой бредовой идее.
24 окт 19, 13:32    [22001637]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
mayton
Member

Откуда: loopback
Сообщений: 42912
Кстати даже еслибы работалю. Сам по себе метод toString() имеет слабый контракт. Грубо говоря он вам ничего не должен.

Поэтому например все конвертации с датами и временем должны проходить через Parsers/Formatters но ни в коем случае
не через toString.

Единственный функционал который toString обеспечивает это частичное текстовое человекочитабельное представление объекта
для логгирования и печати на экране.
24 окт 19, 13:41    [22001650]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7995
mayton
Кстати даже еслибы работалю

а почесму бы и не работать....

например: если научится последовательно перебирать все объекты в памяти (что, наверное, в принципе, можно сделать через рефлекшион) - то найти объект который вернет такой же toString() - вполне себе можно.

только смысла в этом, кроме "смотри как я умею", лично я не вижу
24 окт 19, 13:45    [22001655]     Ответить | Цитировать Сообщить модератору
 Re: Object -> String -> Object  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7995
ну и опять таки, ссылку на объект все равно хранить придется, иначе его Garbage Collector из памяти вычистит )))
24 окт 19, 13:46    [22001656]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить