gpt4 book ai didi

java - 如何修复我的代码中的 "not a functional interface"问题

转载 作者:行者123 更新时间:2023-12-01 17:43:06 29 4
gpt4 key购买 nike

我正在学习 Java 谓词并在这里学习基本代码。下面是我的代码。

package TestLambda;

public class Animal {
private String species;
private boolean canHop;
private boolean canSwim;

public Animal(String species,boolean canHop,boolean canSwim){
this.species = species;
this.canHop = canHop;
this.canSwim = canSwim;
}

public boolean canHop(){return canHop;}
public boolean canSwim(){return canSwim;}
public String toString(){return species;}

下面是我的界面。

package TestLambda;

@FunctionalInterface
public interface CheckTrait {
boolean Test(Animal a);
}

实现接口(interface)。

package TestLambda;

public class CheckIfHopper implements CheckTrait {
public boolean Test(Animal a){
return a.canHop();
}
}

现在我正在测试一个简单的 Lambda。

package TestLambda;

import java.util.ArrayList;
import java.util.List;

public class LambdaSearch {

public static void main(String[] args) {
List<Animal> animals = new ArrayList<>();
animals.add(new Animal("fish",false,true));
animals.add(new Animal("dog",true,true));
animals.add(new Animal("rabbit",true,false));
animals.add(new Animal("horse",true,false));

print(animals, a -> a.canHop());
}

public static void print(List<Animal> animals,CheckIfHopper checkIfHopper){
for(Animal animal :animals){
if(checkIfHopper.Test(animal)){
System.out.println(animal + " ");
}
}
}

}

Mycode 抛出错误:- TestLambda.CheckIfHopper 不是功能接口(interface)

请问我做错了什么?

最佳答案

如果您的目的是测试 lambda 表达式,那么 CheckIfHopper 在这里是多余的。

您的 print 方法将采用 CheckTrait 参数:

public static void print(List<Animal> animals, CheckTrait checkIfHopper){
for(Animal animal :animals){
if(checkIfHopper.Test(animal)){
System.out.println(animal + " ");
}
}
}

调用将是:

print(animals, a -> a.canHop());

为了简洁起见,以下内容:

print(animals, Animal::canHop);

您不能创建 lambda 表达式来提供类的实例,其目标类型必须是函数式接口(interface)(这本质上就是错误消息所说的内容)

您不需要 CheckIfHopper 类,因为 a -> a.canHop()Animal::canHop 提供了实现没有类声明的 CheckTrait (这就是 lambda 表达式的要点,不是吗...)

关于java - 如何修复我的代码中的 "not a functional interface"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601801/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com