Подскажите код метода printMethod() чтобы вывод выглядел примерно так:
"вызов из класс Vremja, метод saveVremja".
"вызов из класс Dengi, метод countDengi"
А>Подскажите код метода printMethod() чтобы вывод выглядел примерно так: А>"вызов из класс Vremja, метод saveVremja". А>"вызов из класс Dengi, метод countDengi"
Вы удивитесь но:
class PrintClass {
public static void printMethod(String str) {
System.out.println(str);
}
}
В принципе зачем городить отдельный класс для всего этого? Огласите суть задачи хотя бы.
Re[2]: Подскажите Java код метода который делает
От:
Аноним
Дата:
07.12.10 05:47
Оценка:
Здравствуйте, Hellhang, Вы писали:
H>В принципе зачем городить отдельный класс для всего этого? Огласите суть задачи хотя бы.
Подозреваю, автор хотел из статического метода получить то, откуда этот вызов пришил. Бэктрэйс анализировать, наверное надо.
Здравствуйте, Аноним, Вы писали:
А>Подскажите код метода printMethod() чтобы вывод выглядел примерно так: А>"вызов из класс Vremja, метод saveVremja". А>"вызов из класс Dengi, метод countDengi"
Посмотри исходный код log4j, например. Там есть определение строки, и метода, откуда был вызов.
А>Подскажите код метода printMethod() чтобы вывод выглядел примерно так: А>"вызов из класс Vremja, метод saveVremja". А>"вызов из класс Dengi, метод countDengi"
А>Подскажите код метода printMethod() чтобы вывод выглядел примерно так: А>"вызов из класс Vremja, метод saveVremja". А>"вызов из класс Dengi, метод countDengi"
StackTraceElement[] stack = new Exception().getStackTrace();
System.out.println("вызов из класс " + stack[1].getClassName() + ", метод " + stack[1].getMethodName());
Разворачивать stack очень накладно в плане производительности. Т.е. для единичного использования подойдет, а вот для большого количество кода во всей системе может привести к тормозам.
Есть такой неофициальный метод получения класса sun.reflect.Reflection.getCallerClass(). Должен быть быстрее.
Если нужно ещё имя метода, и без потерь с производительностью, то только AOP
Re[2]: Подскажите Java код метода который делает
От:
Аноним
Дата:
07.12.10 09:41
Оценка:
Здравствуйте, Blazkowicz, Вы писали:
а что такое АОР?
да это для логирования. просто а о многих местах в код вставляются метод
со многими параметрами, а зотелось бы вызов метода со всего одним параметром B>Здравствуйте, Аноним, Вы писали:
B>Разворачивать stack очень накладно в плане производительности. Т.е. для единичного использования подойдет, а вот для большого количество кода во всей системе может привести к тормозам. B>Есть такой неофициальный метод получения класса sun.reflect.Reflection.getCallerClass(). Должен быть быстрее. B>Если нужно ещё имя метода, и без потерь с производительностью, то только AOP
Re[3]: Подскажите Java код метода который делает
От:
Аноним
Дата:
07.12.10 09:56
Оценка:
А>Подозреваю, автор хотел из статического метода получить то, откуда этот вызов пришил. Бэктрэйс анализировать, наверное надо.
А как этот Бэктрэйс делается?
Я "логю" во многих местах разных классов разную инфу и чисто визуально исходный код
загроможден этими логами с кучей параметров (откуда вызван логер : класс, метод)
А не лучще бы чтоб метод сам определял это
вот это мне надо
Здравствуйте, Аноним, Вы писали:
А>а что такое АОР?
Аспектно-ориентированое программирование. Подход, который позволяет достаточно просто решать задачи вроде вашей.
А>да это для логирования. просто а о многих местах в код вставляются метод А>со многими параметрами, а зотелось бы вызов метода со всего одним параметром
Существуют разные методы и библиотеки для реализации. Например обернуть все ваши классы проксями. В прокси класс и метод можно узнать из параметров. Или во время загрузки классов модифицировать байткод, так чтобы он добавлял нужные методы. Этот вариант ещё и по производительности лучше.
Посмотрите документацию по Spring AOP или Aspect4J
Re[4]: Подскажите Java код метода который делает
От:
Аноним
Дата:
07.12.10 11:42
Оценка:
Вернувшись назад к коду, если я сделаю вот так
class Vremja{
void saveVremja(){
...
PrintClass.printMethod();
...
}
}
class Dengi{
void countDengi(){
...
PrintClass.printMethod();
...
}
}
Здравствуйте, Аноним, Вы писали:
А>Будет ли это работать как мне надо? Я имеею ввиду производительность и проч.
Откуда нам знать как вам надо? Производительность будет так себе. Но если вы будете вызывать метод не часто, то почему бы и нет?