繁体   English   中英

为什么首先投射到Closeable?

[英]Why cast to Closeable first?

在阅读一些Java源代码时,我遇到了这一行:

((Closeable) some_obj).close();

some_obj显然是实现Closeable接口的类的实例。 我的问题是,为什么他们在调用close()之前首先将some_obj强制转换为Closeable。 我不能这样做

some_obj.close();

假设some_obj编译时类型实现了Closeable ,那么是的,你可以。

如果你有一个知道实现的对象是Closeable ,但是编译时类型更通用(最明显的例子是Object )或者“不同”(例如不同的接口), 只需要这个。

正如感兴趣的事情,在C#强制转换为一个接口类型可以有所作为,即使编译时类型是已知的实现接口,由于显式接口实现。 如果有人关心,我可以提供更多细节,但我只是想把它扔出去。

如果变量some_obj已知编译时类型包含方法close()some_obj yes。

这听起来像是没有必要进行类型转换。 (您可以通过尝试编译具有所谓的冗余类型转换的类来确认这一点。)

我们可能永远不知道为什么代码是这样编写的。 它可能会遗留在代码的前一个版本中,其中声明的some_obj类型不同。 可能是开发人员有一些风格问题......

虽然如果删除了多余的强制转换,它(可能)代码会提高可读性,但它实际上并没有造成任何伤害。 我希望Java编译器或JIT编译器能够优化它。 即使它没有,多余的类型转换的成本很可能是微不足道的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM