加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 功能接口的概念

发布时间:2020-12-15 04:39:10 所属栏目:Java 来源:网络整理
导读:当我瞥一眼lambda表达式时,本书触及了一个只有一个抽象方法的功能界面.我的问题涉及该测验问题 /* Which of these interfaces are functional interfaces? */public interface Adder{ int add(int a,int b);}public interface SmartAdder extends Adder{ int
当我瞥一眼lambda表达式时,本书触及了一个只有一个抽象方法的功能界面.我的问题涉及该测验问题

/* Which of these interfaces are functional interfaces? */
public interface Adder{
   int add(int a,int b);
}
public interface SmartAdder extends Adder{
   int add(double a,double b);
}
public interface Nothing{
}

我知道最后一个不是,但我认为第一个和第二个应该是功能接口.但是这本书说第二个不是.为什么?它不会覆盖添加方法吗?所以即使在第二个,是不是只有一个抽象方法?

解决方法

一个简单的方法是尝试定义一个实现SmartAdder的类.编译器会告诉你需要实现add(int,int)和add(double,double).

可以理解的是,您认为add(double,double)会覆盖add(int,int),但它们实际上是单独的方法,并且可能具有完全不相关的实现.

如果SmartAdder定义了add(int,int)的默认实现,它仍然是一个功能接口:

public interface SmartAdder extends Adder {
   int add(double a,double b);

   default int add(int a,int b) {
     return add((double)a,(double)b); // this calls the double method instead
  }
}

您可能还遇到过@FunctionalInterface注释 – 这可以放在一个接口上,以便在编译时强制执行该接口只有一个抽象方法.如果使用@FunctionalInterface注释SmartAdder,则接口本身将无法编译.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读