我正在学习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());
但我想知道第一个例子是否可行?
答案 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。