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

Я могу получить откуда он вызван из
Throwable.getStackTrace(), но мне нужен доступ к экземпляру вызвавшего класса. Возможно ли это?
...
Рейтинг: 0 / 0
28.01.2005, 14:12
    #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
28.01.2005, 14:26
    #32889383
mitya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вохможно ли узнать откуда вызван метод?
В том-то и дело, что не могу я передать в метод объект:
commonMethod(Object whoCallMe)

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

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

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

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

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

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

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

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

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

В противном случае вся задача (using Idea) - это нажать ctrl-f6, указать новую сигнатуру метода, дефолтное значение 'this' и через 3 минуты все вызовы метода заменены на корректные.
...
Рейтинг: 0 / 0
31.01.2005, 13:43
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Вохможно ли узнать откуда вызван метод? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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