C# 是“显式实现”吗? Java 中存在的接口是什么?
在 C# 中,如果您有两个具有相同方法(例如 F())的基接口,您可以使用显式实现来执行不同的 impl。 对于 F()。 这允许您根据当前的观点以不同的方式对待对象:作为 IMyInterface1 或 IMyInterface2。 这在Java中可能吗?
In C#, if you have two base interfaces with the same method (say, F()) you can use explicit implementation to perform different impl. for F(). This alloes you to differently treat the object, corresponding to the current point of view: as IMyInterface1 or IMyInterface2. Is this possible in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不,没有什么比 Java 中 C# 的显式接口实现更好的了。
从好的方面来说,Java 具有协变返回类型,因此如果您想提供比接口指定的类型更强的实现,那也没关系。 例如,这很好:
C# 不允许这样做(在 C# 9 之前,现在支持协变返回类型) - 解决方法之一通常是显式实现接口,然后有一个更具体的公共方法(通常称为通过接口实现)。
No, there's nothing like C#'s explicit interface implementation in Java.
On the plus side, Java has covariant return types, so if you want to provide a more strongly typed implementation than the interface specifies, that's okay. For instance, this is fine:
C# wouldn't allow that (prior to C# 9, which now supports covariant return types) - and one of the ways around it is typically to implement the interface explicitly and then have a more specific public method (usually called by the interface implementation).
使用Java中的匿名接口实现机制也可以达到类似的效果。
参见示例:
You can achieve similar effect using the mechanism of anonymous interface implementation in Java.
See example:
仅当方法重载时才可以执行此操作。
如果您有两个预计执行不同操作的方法,那么它们应该具有不同的名称,恕我直言。
You can only do this if the methods are overloaded.
If you have two method which are expected to do different things, they should have different names IMHO.
不,它永远不应该出现在 Java 中。 对于那些不关心好的设计的人来说,这只是又一根骨头。
永远不需要或使用接口的显式实现。 有更好的方法来解决本文试图解决的问题。
No and it should never be present in Java. It's just another bone to throw at people who can't be bothered with good design.
Explicit implementation of an interface should never be needed or used. There are better ways to solver the problem that this tries to solve.