在阅读一些Java源代码时,我碰到了这一行:
((Closeable) some_obj).close();
some_obj显然是实现Closeable接口的类的实例。我的问题是,为什么他们在调用close()之前先将some_obj转换为Closeable。
我不能只是做
some_obj.close();
最佳答案
假设some_obj
的编译时类型实现了Closeable
,那么可以。
仅当您拥有一个知道已实现Closeable
的对象,而编译时类型更一般(最明显的示例是Object
)或“不同”(例如,不同的接口)时,才需要此对象。
就像一个有趣的事情一样,在C#中,由于显式的接口实现,即使已知编译时类型可以实现接口,也可以强制转换为接口类型。如果有人在乎,我可以提供更多详细信息,但我只是认为我会把它扔在那里。