【发布时间】:2020-10-31 04:27:56
【问题描述】:
我想用单行返回语句替换 if-else 函数,我想知道为什么我不能通过三元运算符中的构造函数引用创建对象?
我想替换这样的东西:
public Animal createAnimal(boolean isDangerous) {
if(isDangerous) {
Shark shark = new Shark(); // Shark extends Animal
return shark ;
}
Cat cat = new Cat(); //Cat extends Animal
return cat;
}
运行良好:
public Animal createAnimal(boolean isDangerous) {
Shark shark = new Shark(); // Shark extends Animal
Cat cat = new Cat(); //Cat extends Animal
return isDangerous ? shark : cat;
}
这也适用于代码的另一部分:
Optional<Animal> animalOptional = zoo.getAnimals().stream().findAny(); //getAnimals() is returning a Set<Animal>
animalOptional.orElseGet(isDangerous ? Shark::new : Cat::new); // -> it creates me an Object depending on the boolean
但是如果我想在那里返回一个对象,我得到了这个错误信息:这个表达式的目标类型必须是一个函数式接口
public Animal createAnimal(boolean isDangerous) {
return isDangerous ? Shark::new : Cat::new;
}
第一个块有单线解决方案吗?
【问题讨论】:
-
您认为
Shark::new能给您带来什么?提示:不是Shark的实例。 -
zoo.getAnimals().stream().findAny().orElseGet(isDangerous : Shark::new : Cat::new);有效,不知道您期待什么? -
return isDangerous ? new Shark() : new Cat();?
标签: java lambda java-8 conditional-operator