在最近的一次采访中,我被问到“我们怎么能说在 java8 中功能接口(interface)类似于标记接口(interface)”这个问题。
我无法回答这个问题。
但我认为标记甚至没有任何方法,而功能接口(interface)必须有一个方法被覆盖。
有人可以帮助我理解这在某些情况下是否是一个有效的论点,或者问题本身是错误的吗?
最佳答案
通常,标记 接口(interface)是单独存在 具有某种效果的接口(interface)。换句话说:某种框架将使用 instanceof
或反射来识别某些对象或类实现该标记接口(interface)的情况,然后根据该信息执行某些操作。
我同意你的理解:调用该接口(interface)的特定方法不是“标记接口(interface)”概念的一部分,至少在我的书中是这样。
除了我的书之外,这似乎是一个众所周知的约定:标记 接口(interface)不声明方法,参见 here或 there .这两个来源都强调:标记 接口(interface)没有方法或常量。
因此我同意你的立场:该包中的函数和其他接口(interface)不是严格意义上的标记接口(interface)。
另一方面,我怀疑您会找到该术语的“官方”定义(例如在 Java 语言规范中)。而在没有官方标准的情况下,人们可以随意编造文字的“意义”。
所以也许您的面试官认为“成为 SAM”界面在某种程度上也是一个“标记”。而且我很确定你不能因为他的意见而起诉他。
关于java - 我们如何/为什么可以说 java 8 中的功能接口(interface)是标记接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56709125/