java - 为什么要先转换为 Closeable?

标签 java interface casting idioms

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

((Closeable) some_obj).close();

some_obj 显然是一个实现了 Closeable 接口(interface)的类的实例。我的问题是,为什么他们在调用 close() 之前先将 some_obj 转换为 Closeable。 我不能做吗

some_obj.close();

最佳答案

假设 compile-time 类型的 some_obj 实现了 Closeable,那么是的,你可以。

只有当你有一个知道实现了 Closeable 的对象时,你才需要这个,但是编译时类型是更一般的东西(最明显的例子是 Object) 或其他“不同”(例如,不同的界面)。

有趣的是,在 C# 中,转换为接口(interface)类型可以产生不同,即使已知编译时类型实现接口(interface),因为显式接口(interface)实现。如果有人关心,我可以提供更多细节,但我只是想把它扔在那里。

关于java - 为什么要先转换为 Closeable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297038/

相关文章:

delphi - 关于给接口(interface)分配GUID的问题

c++ - 如何正确地转换数据开始指针(这甚至是一种好习惯)?

c# - C# 中静态接口(interface)方法的替代方法

java - 当数组长度为 1 时,如何使数组方法返回单个对象?

Java方法签名: Stream versus Collection versus var-arg

java - 来自单个 jsp 表单 spring mvc 的多模型属性

wcf - 为什么建议将服务契约定义为接口(interface)

c# - 如果 is 运算符返回 true,as 运算符的结果是否可以为 null?

c# - 为什么 <enum> 的集合无法转换为 <int?>?

java - 根据间隔分割字符串