Java:如何“instanceof参数”

时间:2014-10-27 12:27:12

标签: java class instanceof

我试过了:

package ro.ex;    

import java.io.IOException;
import java.lang.reflect.Type;

class Ex {
    public boolean isIns(Object o, Class t) {
        o instanceof t;
    }
    public static void main(String[] args) throws IOException {}
}

上面的代码会引发未知类“t”

我的问题是:如何传递上述代码。

更新

以下代码无法通过intellij idea语法检查器

public boolean isIns(Object o, Class<?> t) {
    return o instanceof t;
}

所以想法中的正确代码是:

public boolean isIns(Object o, Class<?> t) {
    return t.isAssignableFrom(o.getClass());
}

更简单的方法是:

package ro.ex;

import java.io.IOException;
import java.lang.reflect.Type;

class Ex {
    public boolean isIns(Object o, Class t) {
        return t.isInstance(o);
    }

    public static void main(String[] args) throws IOException {
        Object r = new Ex().isIns("", String.class);
        System.out.println(r + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
    }
}

5 个答案:

答案 0 :(得分:6)

如果你写x instanceof t,那么t必须是一个班级。在isIns方法中,t不是类,它是Class类型的变量。

但是,类Class确实提供了一些方法,您可以使用这些方法来决定其他类是否是其子类:Class.isAssignableFrom(Class)。所以你可以改变你的方法:

public boolean isIns(Object o, Class t)
{
    return t.isAssignableFrom(o.getClass());
}

(我还更改了你的代码,以便将结果返回给调用者。)

答案 1 :(得分:0)

我不知道您尝试使用自己的方法做什么,但 instanceof 语法错误。

 public boolean isIns(Object o, Class t) {
       return  o instanceof t;
    }

instanceof关键字检查,其Valid类名称不是变量名。这是编译错误。

对于ex:o instanceof String,如果你写得如下,它将无法编译

public boolean isIns(Object o, String str) {
        return o instanceof str;  //err, o instance of String is correct way to check.
    }

我稍微改变了你的方法签名以匹配语句。

答案 2 :(得分:0)

在下面的代码中,t应该是Java类的名称(例如String)。在您的代码中,您传递了一个不合适的变量名称:

public void isIns(Object o, Class t) {
    o instanceof t;
}

由于instanceof检查是单行检查,我不确定为什么要将其包装在方法中。但如果你坚持这样做,也许这就是你想要的:

public static boolean isIns(Object o, Class<?> t) {
  return c.isInstance(o);
}

但有两个注意事项:

  1. 许多instanceof项检查通常表明设计不合理。

  2. Java程序员可以更轻松地看到instanceof而不是isIns(...)

答案 3 :(得分:0)

您应该使用Class类的动态等效的instanceof。 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isInstance(java.lang.Object)

  public void isIns(Object o, Class t) {
        t.isInstance(o);
  }

如果需要,请检查空值。

答案 4 :(得分:-1)

也许你想要这样的东西?

public class test2 {

    class c {
    }

    public test2() {
        c obj = new c();
        System.out.println(isIns(obj));
    }

    public boolean isIns(Object o) {
        return (o instanceof c);
    }

    public static void main(String argv[]) {
        new test2();
    }
}

编辑:删除了无情的类参数。