【问题标题】:Checking if object is instanceof Class in function, which takes Class as parameter检查对象是否是函数中的instanceof Class,以Class为参数
【发布时间】:2014-09-07 09:30:05
【问题描述】:

我正在用 Java 学习 RTTI,我写了一个这样的函数:

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

问题是,我不知道是否可以通过 Class 作为参数?编译器说它是错误的,它找不到 c。所以我用不同的代码来解决这个问题:

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

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

【问题讨论】:

标签: java rtti


【解决方案1】:

根据需要使用ClassisInstanceisAssignableFrom 方法。

isInstance 文档摘录:

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

isAssignableFrom 文档摘录:

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回 false。

【讨论】:

  • 也许从答案中看不出来。 isInstanceisAssignableFrom 是 Class 对象的方法。所以它会类似于c.isInstance(s)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多