2012-01-15 2 views
4

Я получаю Class<?> от третьего лица .jar, относящегося к типу параметра метода. Мне нужно предпринять разные действия на основе того, что это такое Class<?>.Как проверить класс типа java.lang.Number

Если это какой-либо этот подкласс java.lang.Number (например, Integer, или BigDecimal) Мне нужно выполнить специальный курс действий.

Я не могу использовать instanceof. И я боюсь, что если я использую:

Class<?> someClass = getParameterTypeFrom3rdParty(); 
if(someClass == Number.class) 
    // ... 

Тогда он будет выполняться, если Class<?> является толькоNumber. Как я могу включить наследование в микс, чтобы получить все подтипы Number?

Заранее благодарен!

ответ

14
Number.class.isAssignableFrom(someClass); 

Это должно сделать трюк

+0

Wow! Спасибо, Джон! Из любопытства, это тоже работает для интерфейсов? Я хочу проверить, является ли что-то вроде функции CharSequence (например, String, StringBuffer и т. Д.). Было бы неплохо использовать CharSequence.class.isAssignableFrom (someClass) ... еще раз спасибо! – IAmYourFaja

+0

Добро пожаловать. Да, он тоже работает для интерфейсов –

+0

@AdamTannon [API docs] (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom%28java.lang.Class% 29) четко указать, как он используется. –

Смежные вопросы