Java:如何 "instanceof argument"

标签 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;
}

所以idea中正确的代码是:

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());
    }
}

最佳答案

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

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

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

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

关于Java:如何 "instanceof argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26587592/

相关文章:

java - Intellij IDEA 中的 A 代表什么?

java - 增加一个整数的 int 值?

java - 传递一个扩展另一个类的类

java - 实现某个接口(interface)并具有特定父类(super class)的参数 : generics or instanceof?

java - 如何仅使用 for、if 或 while 查找 java 数组中的重复项?

java - 保存具有起始时间的对象的类的好名字

java - 如何避免在 java 8 中使用接口(interface)?

javascript - 'this'在javascript中的对象内部未定义,通过另一个属性访问对象的属性

python - 从类型中提取数据

java - Java中如何避免instanceof检查