Java 功能界面
Java functional interface
我是 Java8 的新手,我在 Internet 上阅读了一些有关此主题的内容。目前我正试图弄清楚什么是功能接口。我找到了一些例子,但我不明白为什么接口 Skip 是一个函数式接口,因为它有 2 个定义的方法。我希望有人能给我解释一下。代码是:
@FunctionalInterface
public interface Sprint
{
public void sprint(Animal animal);
}
@FunctionalInterface
public interface Skip extends Sprint
{
public default int getHopCount()
{
return 10;
}
public static void skip(int speed) {}
}
你的Skip
接口只有一个抽象方法(default
和static
方法不算)——继承自[=14=的sprint
方法] 界面。因此它是一个功能接口。
最好的思考方式是:将此接口的实例表示为单个 lambda 是否有意义?当您的界面中只有一个 abstract
方法时就是如此。
Sprint
有方法 sprint()
,即 abstract
。此接口的 lambda 类似于:
Sprint sprint = animal -> {
animal.doThingOne();
animal.doThingTwo();
}
Skip
有一个static
方法和一个default
方法。 static
方法与实例无关;这就是Java中static
的意思。此外,default
方法不必在子类中实现,因为已经提供了默认实现。这意味着一个lambda只需要实现Skip
中的抽象方法(又是sprint()
,继承自Sprint
)才有效。示例:
Skip skip = Animal::doThingThree; // Equivalent to: animal -> animal.doThingThree()
由于 static
和 default
方法不必由 lambda 实现,您可以拥有任意数量的函数接口。
我是 Java8 的新手,我在 Internet 上阅读了一些有关此主题的内容。目前我正试图弄清楚什么是功能接口。我找到了一些例子,但我不明白为什么接口 Skip 是一个函数式接口,因为它有 2 个定义的方法。我希望有人能给我解释一下。代码是:
@FunctionalInterface
public interface Sprint
{
public void sprint(Animal animal);
}
@FunctionalInterface
public interface Skip extends Sprint
{
public default int getHopCount()
{
return 10;
}
public static void skip(int speed) {}
}
你的Skip
接口只有一个抽象方法(default
和static
方法不算)——继承自[=14=的sprint
方法] 界面。因此它是一个功能接口。
最好的思考方式是:将此接口的实例表示为单个 lambda 是否有意义?当您的界面中只有一个 abstract
方法时就是如此。
Sprint
有方法 sprint()
,即 abstract
。此接口的 lambda 类似于:
Sprint sprint = animal -> {
animal.doThingOne();
animal.doThingTwo();
}
Skip
有一个static
方法和一个default
方法。 static
方法与实例无关;这就是Java中static
的意思。此外,default
方法不必在子类中实现,因为已经提供了默认实现。这意味着一个lambda只需要实现Skip
中的抽象方法(又是sprint()
,继承自Sprint
)才有效。示例:
Skip skip = Animal::doThingThree; // Equivalent to: animal -> animal.doThingThree()
由于 static
和 default
方法不必由 lambda 实现,您可以拥有任意数量的函数接口。