Проверьте, совпадает ли тип поля с универсальным типом в Java - PullRequest
4 голосов
/ 03 мая 2010

Я хочу определить, является ли поле типизированным как подкласс универсального типа.

Например,

Foo extends Bar<Foo>

Foo x;

Как мне узнать, если поле x напечатано как подтип Bar<Foo>?

1 Ответ

4 голосов
/ 03 мая 2010
Type genericSuperclass = x.getClass().getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
    Type[] types = 
       ((ParameterizedType) genericSuperclass).getActualTypeArguments();
}

Затем вы можете использовать Class.isAssignableFrom, если type instanceof Class, чтобы проверить, является ли оно Foo или нет.

т.е.

if (types[0] instanceof Class) {
    if (x.getClass().isAssignebleFrom(((Class) type[0]))){
        // do something
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...