Идентификация дочернего класса, вызывающего статическую функцию базового класса

1

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

public class Base
{
    protected static void foo()
    {
        // ToDo - what is the name of the child class calling me?
    }
}

и по меньшей мере один дочерний класс, содержащий статический инициализатор, который вызывает foo

public class Child extends Base
{
    static
    {
        foo();
    }
}

Есть ли способ foo() узнать, какой дочерний класс назвал его? Я предполагаю там технику отражения, которую я могу использовать.

  • 1
    Это то же самое, что и определение класса вызова foo ().
  • 1
    Техника, которую вы ищете, описана здесь (например, найти абонента). Тем не менее, зачем вам знать звонящего? Если это для целей регистрации, я уверен, что это лучшее решение на самом деле.
Показать ещё 3 комментария
Теги:

2 ответа

0

Вы можете получить класс с помощью getClass, например:

o.getClass()

также, если у вас есть класс c, и вам нужно проверить, является ли o экземпляром c, вы можете использовать instanceof, например:

o instanceof c

Приветствия.

0

Самый простой способ - передать аргумент. Например

public class Base {
    protected static void foo(Class<?> type) {
        if (type == Child.class) {

        }
    }
}

public class Child extends Base {
   static {
       foo(Child.class);
   }
}

Однако, если вам нужно сделать что-то, что зависит от дочернего класса, я рекомендую искать решение, которое использует абстрактные методы и полиморфизм.

public Base {
    protected static void foo(Base child) {
        child.doFoo();
    }

    protected abstract void doFoo();
}

public Child extends Base {
    static {
        foo(new Child());
    }

    @Override
    protected void doFoo() {
        //do the child specific thing here
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню