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

((Closeable) some_obj).close();

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

最佳答案

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

仅当您拥有一个知道已实现Closeable的对象,而编译时类型更一般(最明显的示例是Object)或“不同”(例如,不同的接口)时,才需要此对象。

就像一个有趣的事情一样,在C#中,由于显式的接口实现,即使已知编译时类型可以实现接口,也可以强制转换为接口类型。如果有人在乎,我可以提供更多详细信息,但我只是认为我会把它扔在那里。

10-07 16:46