检查对象是否为函数中的instanceof类,它将Class作为参数

时间:2014-09-07 09:30:05

标签: java rtti

我正在学习Java中的RTTI,我写了一个类似的函数:

static void select(Shape s, Class c)
{
   if(s instanceof c)
   s.setSelected(true);
}
//Calling function: select(shape0, Circle);

问题是,我不知道是否可以将Class作为paremater传递? Compilator说它是错误的,它找不到c。所以我用不同的代码来解决这个问题:

static void select(Shape s,Object obj)
{
    if(s.getClass().equals(obj.getClass()))
    s.setSelected(true);
}
 //Calling function: select(shape0, new Circle());

但我想知道第一个例子是否可行?

1 个答案:

答案 0 :(得分:1)

根据您的需要,使用Class的{​​{3}}或isInstance方法。

isInstance docs摘录:

  

确定指定的Object是否与此Class表示的对象分配兼容。此方法是Java语言instanceof运算符的动态等效项。如果指定的Object参数为非null,则该方法返回true,并且可以强制转换为此Class对象表示的引用类型,而不会引发ClassCastException。否则返回false。

isAssignableFrom docs摘录:

  

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。