На низком уровне нужно определить имя класса, который его использует. Возможно ли это? Вижу решение в передаче имени в конструктор, но это мне не нравится. Упрощенный пример (в классе MyCommonClass нужно узнать имя класса, который его использует ):
package com.tasks5.extenden;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MyApp {
static Logger log = LogManager.getLogger(MyApp.class.getName());
public static void main(String args[]){
MyCommonClass test = new MyCommonClass(MyApp.class.getName());
log.info("test info maun class");
}
}
package com.tasks5.extenden;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MyCommonClass {
static Logger log = LogManager.getLogger();
public MyCommonClass(String UsesClassName){
log = LogManager.getLogger(UsesClassName);
}
public void Run(){
log.info("info test");
}
}
То, что вы хотите сделать - плохо. Это нарушение как минимум трех принципов хорошего кода сразу: принципа малой связности, принципа единой ответственности и принципа минимальной информированности.
Если прямо вот вообще никак не избежать использования таких костылей, то не усложняйте себе жизнь - явно передавайте контекст в методы класса, которым он нужен (как самый наглядный пример - Context в Android) или, в самом крайнем случае, в конструктор.
Не знаю зачем вам это, но как вариант просто запрашивайте StackTrace для того, что бы узнать кто вас вызвал.
Thread.currentThread().getStackTrace()
Задача эта далеко не тривиальная. Если забыть о вопросе "зачем это нужно", то я бы посмотрел в сторону
ClassLoader
Получить текущий можно например так:
ClassLoader.getSystemClassLoader()
Далее, немного магии Reflection, и у вас будет
Vector<Class<?>> classes
по факту, это все загруженные классы.
Ну а далее, все более-менее просто - находите нужный вам класс и анализируете его (импорт, поля, возвращаемые значения методов).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте,допустим на этом сайте я хочу с помощью java нажать на кнопку-"Задать вопрос"По средствам чего это можно сделать и можно ли вообще?
Добрый день! Есть задача: выделять определенные дни цветамиОдин день я выделить цветом могу,а вот несколько