говорят, что есть 2 класса ...Как узнать, какой класс называется абстрактным методом?
public class NotAbstract1 extends AnAbstract {
NotAbstract1() { super(); }
}
public class NotAbstract2 extends AnAbstract {
NotAbstract2() { super(); }
}
public abstract class AnAbstract {
AnAbstract() { //do something }
abstract void saySomething() { System.out.println("Something"); }
}
В этом примере NotAbstract1
и NotAbstract2
можно вызывать saySomething()
. Как я могу, из метода saySomething()
AnAbstract
признать класс, который его назвал? Без указания класса или идентификатора.
Опять же, простым решением является изменение подписи метода saySomething(Class clazz)
, но я хотел бы не сделать это. У меня есть ощущение, что это можно сделать с отражением, поэтому я добавляю этот тег к вопросу.
Возможно, ваш вопрос может быть проблемой [XY] (http://mywiki.wooledge.org/XyProblem), где вы спрашиваете «как исправить эту проблему с кодом», когда лучшим решением является использование другого подхода полностью , Подумайте, расскажите нам общую проблему, которую вы пытаетесь решить, а не как пытаетесь ее решить. –
Что вы пытаетесь достичь? Как вы собираетесь использовать знания о типе экземпляра 'this'? Если у вас есть сценарий типа 'if (это NotAbstract1) {fooX();} else if (это NotAbstract2) {fooY();}', тогда вы должны просто добавить другой метод в 'AnAbstract', например' foo() ' и переопределить его в каждом не-абстрактном классе и переместить каждый 'fooX' и' fooY' в этот метод. Таким образом, в 'saySomething' вам просто нужно будет вызвать' foo() '. – Pshemo
Вы спрашиваете о типе 'this'? Я не уверен, что ты есть. –