首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要先转换为Closeable?

为什么要先转换为Closeable?
EN

Stack Overflow用户
提问于 2010-07-21 15:20:18
回答 3查看 200关注 0票数 3

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

代码语言:javascript
复制
((Closeable) some_obj).close();

some_obj显然是一个实现Closeable接口的类的实例。我的问题是,为什么他们先将some_obj转换为Closeable,然后再调用close()。我就不能这样做吗

代码语言:javascript
复制
some_obj.close();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-21 15:21:36

假设some_obj的编译时类型实现了Closeable,那么可以这样做。

只有当你有一个已经实现了Closeable的对象,但是编译时类型是更通用的(最明显的例子是Object)或其他“不同的”(例如,不同的接口)时,你才需要它。

有趣的是,在C#中,由于显式的接口实现,即使已知编译时类型实现了接口,对接口类型的强制转换也会有所不同。如果有人关心,我可以给出更多细节,但我只是想把它抛出去。

票数 7
EN

Stack Overflow用户

发布于 2010-07-21 15:22:25

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

票数 3
EN

Stack Overflow用户

发布于 2010-07-21 15:45:04

听起来类型转换是不必要的。(您可以通过尝试编译类来确认这一点,其中删除了假定的冗余类型转换。)

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

如果去掉了冗余的强制转换,它(可能)会提高代码的可读性,但它实际上并没有造成任何危害。我希望Java编译器或JIT编译器会对其进行优化。即使不是这样,冗余类型转换的成本也很可能微不足道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3297038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档