在阅读一些 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/