instanceof
运算符是做什么用的?我看过类似的东西
if (source instanceof Button) {
//...
} else {
//...
}
但是,这对我来说都没有意义。我已经完成了研究,但只提出了没有任何解释的示例。
instanceofkeyword
是用于测试对象(实例)是否为给定Type的子类型的二进制运算符。
想像:
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
对于所有Types
都是false T
。
问题内容: 是否有可以与运算符一起使用的有效的类Type变量?例如: 作为替代方案: 会有性能上的好处吗? 问题答案: 你在做什么实际上是不一样的。考虑一下子类会发生什么(我知道您不能子类,所以在这种情况下不要紧)。 如果您有一个对象,并且想知道它是否是某种类型的实例,并且您有该对象,则可以使用该方法。 无论哪种情况,我都希望性能差异不大。
问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 左侧(LHS)操作数是要测试到右侧(RHS)操作数的实际对象,右侧对象是类的实际构造函数。基本定义是: 这是直接从Mozilla开发人员网站获取的示例: 值得一提的是,如果对象继承自类的原
问题内容: 整个泛型问题有点让我陷入困境,RTT更是如此。 规范?嗯,这是要点: 然后我会这样称呼它: 这样一来,我便可以在实际的帮助程序中灵活地分配查询返回类型。它进行一些转换和对象创建。我看到的是没有匹配项,我应该以其他方式这样做吗?还是整个想法不好? 真正的核心是我不了解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗? 问题答案: 这样一来,我便可以
问题内容: 何时使用和何时使用运算符? Java提供了两个选项来检查分配兼容性。什么时候使用? 问题答案: 我认为官方文档为您提供了答案(尽管以一种非常具体的方式): 此方法与Java语言instanceof运算符动态等效。 我认为这主要是指在运行时处理类型反射的代码中使用。特别是,我想说它的存在是为了处理您可能不事先知道要检查其成员资格的类的类型的情况(尽管这些情况可能很少)。 例如,您可以使用
问题内容: 我对对象使用开关盒有疑问: 例如:我的问题可以用Java复制: 如何使用实施? 问题答案: 这是子类型多态性有帮助的典型方案。请执行下列操作 然后,你可以简单的调用上。 如果你不能随意更改,和,则可以应用访问者模式来实现相同目的。
问题内容: 我有一个类型为Patient_class的arraylist,并且用黄色下划线标出了arraylist类型,IDE提到了“新表达式中的冗余类型参数(使用菱形运算符)”。 我的问题是:我应该改用菱形运算符吗?是必须的吗?将记录存储到arraylist时,是否会丢失数据或出现其他任何问题? 这是我的数组列表: 老实说,我不知道钻石经营者实际上是什么。 问题答案: Diamond运算符的目的