2012-01-15 125 views
4

我正在从属于方法参数类型的第三方.jar提供Class<?>。我需要根据这个Class<?>的实际情况采取不同的行动。如何检查一个类是否为java.lang.Number类型

如果是java.lang.Number的子类(如IntegerBigDecimal)的任何东西,我需要采取特殊的行动。我不能使用instanceof。我怕,如果我使用:

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

那么如果Class<?>只有一个Number它将执行。我怎样才能把继承融合到混合中,这样我得到了Number的所有子类型?

在此先感谢!

回答

14
Number.class.isAssignableFrom(someClass); 

这应该做的伎俩

+0

哇!谢谢约翰!出于好奇,这是否也适用于接口?我想检查是否有CharSequence的impl(如String,StringBuffer等)。能够使用CharSequence.class.isAssignableFrom(someClass)会很好......再次感谢! – IAmYourFaja 2012-01-15 16:23:10

+0

不客气。是的,它也适用于接口 – 2012-01-15 16:24:15

+0

@AdamTannon [API文档](http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom%28java.lang.Class% 29)清楚地说明它是如何使用的。 – 2012-01-15 16:24:55