Учитывая экземпляр любого типа класса, как узнать, какой родительский класс и / или признаки он наследует или реализует? - PullRequest
10 голосов
/ 25 августа 2011

Предположим, существуют следующие определения классов / признаков:

trait T1 {}
trait T2 {}
abstract class A{}

class B {}
class C extends A with T1 with T2 {}

val b = new B with T1
val c = new C

Учитывая экземпляр b и c, как я могу получить их информацию о наследовании (то есть узнать, что b реализует T1, а c реализует A, T1 и T2)?

Спасибо за вашу помощь.

1 Ответ

20 голосов
/ 25 августа 2011

Если вы не знаете тип объекта (у вас есть AnyRef) и просто хотите проверить, является ли он экземпляром какого-либо класса или свойства, тогда вы можете использовать isInstanceOf:

b.isInstanceOf[T2]

Если вы хотите привести его к этому типу, тогда используйте asInstanceOf

b.asInstanceOf[T1]

С другой стороны, если вы не знаете, что ищете, тогда вы можете попробовать использовать отражение Java. Чтобы получить список реализованных свойств и интерфейсов, используйте:

c.getClass.getInterfaces

Чтобы получить суперкласс, используйте:

c.getClass.getSuperclass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...