У меня есть массив методов, которые можно вызывать и нуждаться в булевом параметре. Я попытался это:Java: возвращаемый массив функций
public class Example {
public Function<Boolean, Integer> getFunctions(boolean t) {
return new Function[] {
this::magicNumber
};
}
public int magicNumber(boolean t) {
return (t) ? new Random().nextInt(11) : 0;
}
}
Но тогда компилятор выдает сообщение об ошибке с сообщением
Incompatible types: invalid method reference
Incompatible types: Object cannot be converted to boolean
В приведенном выше примере, однако, может работать, сохраняя функции в переменной и возвращения, однако я дон Не находите этот чистый код и он лишний.
public class Example {
public Function<Boolean, Integer> getFunctions(boolean t) {
Function<Boolean, Integer> f = this::magicNumber;
return new Function[] {
f
};
}
public int magicNumber(boolean t) {
return (t) ? new Random().nextInt(11) : 0;
}
}
Есть ли способ сократить код выше, как в примере в начале?
EDIT
Как запрошен комментатор, я дам краткий пример того, как я Поставщик в предыдущем проекте. Я возвращаю их в массив для возврата объектов. Проблема в том, что этот проект зависит от наличия параметра.
public Supplier<T>[] getRecipes()
{
return new Supplier[] {
this::anchovyRule,
this::codRule,
this::herringRule,
this::lobsterRule,
this::mackerelRule,
this::pikeRule,
this::salmonRule,
this::sardineRule,
this::shrimpRule,
this::troutRule,
this::tunaRule
};
}
Я бы хотел, чтобы ваши примеры были скомпилированы в первую очередь. Почему вы игнорируете 't' в' getFunctions'? –
@Tunaki Я хочу вернуть массив функций, как я продемонстрировал в первом блоке кода. – DevNebulae
@ GamerNebulae, как показывает Tunaki, массивы и дженерики не очень хорошо смешиваются. Если не существует конкретной причины, по которой он должен быть массивом, вместо этого используйте коллекцию, такую как «List>». –
Jesper