[英]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.