Существует ли способ узнать название производного класса от экземпляра базового класса?
например:
class A{
....
}
class B extends A{
...
}
class c extends A{
...
}
теперь, если метод возвращает объект A
, я могу узнать, имеет ли это тип B
или C
?
используя instanceof
или Class#getClass()
A returned = getA();
if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }
getClass()
вернет одно из: A.class
, B.class
, C.class
Внутри if-клаузы вам нужно будет понизить кастинг - т.е.
((B) returned).doSomethingSpecificToB();
Однако иногда считается, что использование instanceof
или getClass()
- плохая практика. Вы должны использовать полиморфизм, чтобы попытаться избежать необходимости проверки конкретного подкласса, но я не могу сказать вам больше с предоставленной информацией.
Вы пробовали использовать instanceof
например
Class A aDerived= something.getSomethingDerivedFromClassA();
if (aDerived instanceof B) {
} else if (aDerived instanceof C) {
}
//Use type-casting where necessary in the if-then statement.
Краткий ответ на ваш вопрос
Есть ли способ узнать имя производного класса из объекта базового класса?
нет , суперкласс не имеет возможности сообщить имя / тип подкласса.
Вы должны опросить объект (который является экземпляром подкласса) и спросить, является ли он: instanceof
конкретным подклассом, или назвать его getClass ()
метод.
Я могу придумать два способа 1) Один с использованием API отражения Java 2) Другой может быть с instanceOf
Другой метод может быть Сравнение объектов с объектами, я не знаю, как это может быть, вы можете попробовать это