作者:mobiledu2502881513 | 来源:互联网 | 2022-10-20 13:09
在最近的一次采访中,有人问我一个问题:“我们怎么能说java8中的功能接口类似于标记接口”。
我无法回答这个问题。
但是我认为标记甚至没有任何方法,而功能接口必须要覆盖一种方法。
有人可以帮助我理解这是否在某些情况下是有效的论点,或者问题本身是错误的?
1> GhostCat say..:
通常,标记器接口是仅凭其存在就具有某种效果的接口。换句话说:某种框架将使用instanceof
或可能使用反射来标识某些对象或类实现该标记接口的情况,然后根据该信息来执行某些操作。
我同意您的理解:至少在我的书中,调用该接口的特定方法不是该概念“标记接口”的一部分。
在我的书之外,这似乎是一个众所周知的约定:标记接口未声明方法,请参见此处或此处。这两个来源都强调:标记接口没有方法或常量。
因此,我同意您的立场:严格意义上,函数和该包中的其他接口不是标记接口。
另一方面,我怀疑您会发现该术语的“正式”定义(例如,在Java语言规范中)。在没有官方标准的情况下,人们可以自由编造单词的“含义”。
因此,也许您的面试官认为“成为SAM ”界面在某种程度上也就是“标记”。而且我很确定您不能起诉他的意见。
@ Turing85我会说“标记接口”是在有注释之前的一段遗迹……但我并不完全同意:注释要求框架使用反射。我们在几个地方都有自己的标记器接口,并且能够执行instanceof-check是比反射更好的“使用概念”。
@daniu与我们组织中的5个不同的小组交谈时,我敢肯定我会回来对“单元测试”一词进行5个不同的定义。那给了我一个重要的教训:除非对术语进行明确说明和刻画:不要指望每个人都同意您的定义...