Я хочу заменить функцию if-else однострочным оператором return, и мне было интересно, почему я не могу создать объект через ссылку на конструктор в тернарном операторе?
Что бы я хотел чтобы заменить что-то вроде этого:
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;
}
Есть ли однострочное решение для первый блок?