Java中使用的“instanceof”运算符是什么?
2022-08-31 06:59:23
运算符的用途是什么?我见过这样的东西instanceof
if (source instanceof Button) {
//...
} else {
//...
}
但对我来说,这些都没有意义。我做了我的研究,但只提出了例子,没有任何解释。
运算符的用途是什么?我见过这样的东西instanceof
if (source instanceof Button) {
//...
} else {
//...
}
但对我来说,这些都没有意义。我做了我的研究,但只提出了例子,没有任何解释。
instanceof
关键字是一个二元运算符,用于测试对象(实例)是否为给定类型的子类型。
想象:
interface Domestic {}
class Animal {}
class Dog extends Animal implements Domestic {}
class Cat extends Animal implements Domestic {}
想象一个对象,创建于 ,然后:dog
Object dog = new Dog()
dog instanceof Domestic // true - Dog implements Domestic
dog instanceof Animal // true - Dog extends Animal
dog instanceof Dog // true - Dog is Dog
dog instanceof Object // true - Object is the parent type of all objects
但是,使用 ,Object animal = new Animal();
animal instanceof Dog // false
因为是一种超类型,可能不那么“精致”。Animal
Dog
和
dog instanceof Cat // does not even compile!
这是因为 既不是 的子类型也不是 的超类型,它也没有实现它。Dog
Cat
请注意,用于上述的变量的类型为 。这是为了显示是一个运行时操作,并将我们带到一个/用例:在运行时根据对象类型做出不同的反应。dog
Object
instanceof
需要注意的事项:对于所有类型都是假的。expressionThatIsNull instanceof T
T
如果表达式的左侧是右侧类名的实例,则返回 true。
这样想吧。假设你街区上的所有房子都是用相同的蓝图建造的。十个房屋(对象),一组蓝图(类定义)。
instanceof
是一个有用的工具,当你有一个对象的集合,你不确定它们是什么。假设您在窗体上有一个控件集合。您希望读取任何复选框的已检查状态,但不能要求普通旧对象的已检查状态。相反,您会看到每个对象是否是一个复选框,如果是,请将其转换为复选框并检查其属性。
if (obj instanceof Checkbox)
{
Checkbox cb = (Checkbox)obj;
boolean state = cb.getState();
}