Отражение API - найти тип подкласса - PullRequest
0 голосов
/ 02 июня 2011

Привет, я пытаюсь найти подкласс, сформировать объект суперкласса.

if Class Super is the super class.
and Class Sub1 and Class Sub2 extends Class Super.(all classes are public)

Lets say I have a object of Super type as
Super superObject = new Sub1();

теперь для суперобъекта, возможно ли найти, какой подкласс суперобъект расширяется в Java?

Так как «Суперкласс не будет знать о каких-либо подклассах, которые у него есть», скажите, пожалуйста, мой вопрос выше действителен , или я пропускаю какие-либоОсновная концепция?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 02 июня 2011

Ваш вопрос, "можно ли найти, какой подкласс суперобъект распространяется в Java?" , не имеет никакого смысла.

Во всяком случае, я полагаю, что вы ищете Class.isAssignableFrom() может помочь в этом отношении.

Использование:

superClass.isAssignableFrom(subClass);

Docs:

Определяет, является ли класс или интерфейс представленный этим объектом класса либо такой же, либо суперкласс или суперинтерфейс, класс или интерфейс представлен указанным Параметр класса.

Ссылка

2 голосов
/ 02 июня 2011

Метод getClass () вернет конкретный тип объекта во время выполнения, а не ссылочный тип.Так просто:

Super superObject = new Sub1();
Class<? extends Super> klass = superObject.getClass();

даст вам Sub1.class Из вашего вопроса не ясно, что вы затем хотите с ним делать.Вы можете просто вызвать getName () для этого, проверить, имеет ли другая ваша ссылка того же типа, и т. Д. И т. Д.

0 голосов
/ 02 июня 2011

Вы хотите этот метод:

boolean isList = Subclass.isAssignableFrom(Superclass);

Из JavaDoc:

Определяет, совпадает ли класс или интерфейс, представленный этим объектом класса, сили является суперклассом или суперинтерфейсом класса или интерфейса, представленного указанным параметром Class.Возвращает истину, если так;в противном случае возвращается false.Если этот объект Class представляет примитивный тип, этот метод возвращает true, если указанный параметр Class является именно этим объектом Class;в противном случае возвращается false.

Ссылка:

 Class.isAssignableFrom(Class)
...