powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вохможно ли узнать откуда вызван метод?
12 сообщений из 12, страница 1 из 1
Вохможно ли узнать откуда вызван метод?
    #32889314
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблеммы:
В классе есть статический метод. Необходимо в
нем узнать кто его вызывает и получить к вызвавшему экземпляру класса
доступ(если он имнлементит интерфейс, то вызвать его метод).

Я могу получить откуда он вызван из
Throwable.getStackTrace(), но мне нужен доступ к экземпляру вызвавшего класса. Возможно ли это?
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32889327
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public   static  commonMethod(Object whoCallMe) {
  ...
   if  (whoCallMe  instanceof  CallingClass) {
    ((CallingClass) whoCallMe).doSomething(...);
  }
  ...
}

--
Lacrima Mosa Est
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32889383
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что не могу я передать в метод объект:
commonMethod(Object whoCallMe)

Написаны уже десятки тысячи строк кода, где этот метод вызывается:
public static void log(String s) - делает логирование и хотелось бы
узнать из какого модуля он вызван.
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32889457
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не оно?: http://samag.ru/img/uploaded/2003/3/j3.pdf

Поищи "Стек вызовов метода".
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32890015
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрел. Не помогает.
С помощью sun.reflect.Reflection.getCallerClass(count);
я могу получить класс, а мне надо экземпляр(объект) вызвавшего
класса.
Есть еще у кого какие идеи?
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32890042
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО если исходники вызывающего кода тебе недоступны то можно только трассировать стек. Других методов нет.
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32890300
Фотография ejik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poprobui tak -

Код: plaintext
1.
2.
3.
 public   static  commonMethod() {
     new  Exception("dsfhkjshf").printStackTrace();
}
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32890329
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходники вызывающих классов мне доступны.
Я не понимаю
почему если у меня есть экземпляр класса Class1 obj1,
который вызывает у себя метод "aaa(String s)" из Class2,
то почему никак нельзя получить доступ в методе "aaa(String s)"
к объекту obj1. Единственный путь - передача obj1 в метод aaa
не подходит.
Кто-нибудь знает выход?
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32891160
java script != java
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MityaИсходники вызывающих классов мне доступны.
Я не понимаю
почему если у меня есть экземпляр класса Class1 obj1,
который вызывает у себя метод "aaa(String s)" из Class2,
то почему никак нельзя получить доступ в методе "aaa(String s)"
к объекту obj1.

Потому что это жуткие костыли. Их использование - явное свидетельство плохо организованного кода.

Ещё раз: "десятки тысячи строк кода, где этот метод вызывается" - это код ты менять не можешь физически, а класс в котором находится статический метод log() - можешь?

В такой ситуации ничего не поделать кроме как определить log() деприкейтитом, и добавить метод log(Object caller), что бы в будущем использовали его и по возможности заменяли старый метод новым.
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32891168
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Написаны уже десятки тысячи строк кода, где этот метод вызывается:
public static void log(String s) - делает логирование и хотелось бы

Во народ обленился! Работы-то всего нечего на полчаса - для 10000 строк кода. Делаешь два метода - один депрекайтед, второй обычный /*как ранее советовали, respect /. После этого садишься и правишь код. В чём проблема-то?
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32891176
java script != java
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
www.fun4me.narod.ru>> Написаны уже десятки тысячи строк кода, где этот метод вызывается:
public static void log(String s) - делает логирование и хотелось бы

Во народ обленился! Работы-то всего нечего на полчаса - для 10000 строк кода. Делаешь два метода - один депрекайтед, второй обычный /*как ранее советовали, respect /. После этого садишься и правишь код. В чём проблема-то?

Проблема в том, что код который надо править - может быть не доступен для исправления.

В противном случае вся задача (using Idea) - это нажать ctrl-f6, указать новую сигнатуру метода, дефолтное значение 'this' и через 3 минуты все вызовы метода заменены на корректные.
...
Рейтинг: 0 / 0
Вохможно ли узнать откуда вызван метод?
    #32892342
mitya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java script != java www.fun4me.narod.ru>> Написаны уже десятки тысячи строк кода, где этот метод вызывается:
public static void log(String s) - делает логирование и хотелось бы

Во народ обленился! Работы-то всего нечего на полчаса - для 10000 строк кода. Делаешь два метода - один депрекайтед, второй обычный /*как ранее советовали, respect /. После этого садишься и правишь код. В чём проблема-то?

Проблема в том, что код который надо править - может быть не доступен для исправления.

В противном случае вся задача (using Idea) - это нажать ctrl-f6, указать новую сигнатуру метода, дефолтное значение 'this' и через 3 минуты все вызовы метода заменены на корректные.

Правильно сказано. Заказчик никогда не разрешит мне править код, которому уже несколько лет и он стабильно работает у кастомеров. Единственное, что я могу сделать - менять класс, в котором статический метод log.
По поводу создания deprecated и добавления нового метода и последующего использования его, то это можно конечно, но хотелось бы, чтоб работало и со старым. Но как я понял - это не возможно без перелопачивания всего старого кода.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вохможно ли узнать откуда вызван метод?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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