当前位置: 首页 > 面试题库 >

为什么在instanceOf之后进行转换?

金坚
2023-03-14
问题内容

在下面的示例中(来自我的Coursepack),我们希望给该Square实例c1一些其他对象的引用p1,但前提是这两个对象是兼容类型的。

if (p1 instanceof Square) {c1 = (Square) p1;}

我在这里不明白的是,我们首先检查p1确实为Square,然后仍将其强制转换。如果是Square,为什么要投射?

我怀疑答案在于表观类型和实际类型之间的区别,但是我还是很困惑……

编辑:
编译器将如何处理:

if (p1 instanceof Square) {c1 = p1;}

Edit2:

是instanceof检查实际类型而不是外观类型的问题吗?然后演员表改变了明显的类型?

谢谢,


问题答案:

请记住,您始终可以将Square实例分配给继承链上方的类型。然后,您可能需要将不太具体的类型转换为更具体的类型,在这种情况下,您需要确保您的转换有效:

Object p1 = new Square();
Square c1;

if(p1 instanceof Square)
    c1 = (Square) p1;


 类似资料:
  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 问题内容: 在一个Android应用中,我将此代码添加到 onCreate() 进口是: 代码可以编译,但是出现异常: 在不同的上下文中,故障会导致(即 _java.lang.ArrayStoreException:java.net.Socket无法存储在类型为java.io.Closeable []的数组中_ )。 我想念什么吗?知道该怎么办吗? 编辑 类似,当按原样使用时,它会导致 java.

  • 问题内容: 以下哪个更好? 要么 我知道的唯一区别是,当“ a”为null时,第一个返回false,而第二个抛出异常。除此之外,它们是否总是给出相同的结果? 问题答案: 使用时,你需要B在编译时知道类。使用时可以是动态的,并且可以在运行时更改。

  • 问题内容: 我正在看这个Railscast插曲,想知道为什么需要在这里致电: 有什么用? 根据Rails的文档: escape_javascript(javascript) 转义符返回以及JavaScript段的单引号和双引号。 但这对我来说意义不大。 问题答案: 如果将代码分为两部分,则更容易理解。 第一部分;是带有erb的javascript。这意味着,它将被内部返回的任何红宝石代码替换。替换

  • React引入了新的静态方法,它在每个呈现方法之前都会被调用,但为什么呢?在prop change之后调用它对我来说是有意义的,但是在之后调用它就没有意义了,也许我错过了什么。 我根据公司的要求创建了一个组件,在组件中日期是从道具控制的。我在组件中有以下状态。 是的,我在中创建了一个额外的变量来跟踪是否由于而被调用,但我认为这不是正确的方法。 或者是我做错了什么或者遗漏了什么,或者不应该在之后调用

  • 我在一个片段中遇到了一个问题,该片段从新的Google Maps API中嵌入了SuportMapFragment。当创建我的片段时,它从方法开始,在中获取一些数据。当这种情况发生时,MapFragment保持在屏幕外,而是显示进度条。 完成后,我向MapView的事件注册。然后我显示片段,这导致地图视图被显示和布局。被触发,动画开始。 多谢!