Я новичок в Java 8, и у меня есть этот вопрос
private Supplier<MissingAttribute> getExceptionSupplier(final String message) {
return () -> new MissingAttribute(message);
}
Член моей команды сказал получение объекта сообщения делает его больше не поставщиком, а функцией, но другой член команды сказал это все еще поставщик (функция получения). Сообщение в функции предопределено
Я в замешательстве, что правильно.
public class MissingAttribute extends Exception {
public MissingAttribute(String message, Exception cause) {
super(message + " : " + cause.getMessage(), cause);
}
public MissingAttribute(String message) {
super(message);
}
.
.
.
Я провел исследование в Интернете, но я все еще не уверен в ответе. Любые идеи по этому поводу приветствуются!
Ваша функция getExceptionSupplier возвращает поставщика, принимающего строку в качестве аргумента. Поставщик здесь не принимает никаких объектов в качестве входных данных. Вы работаете здесь, используя String вместо этого. Вы путаете с обычной функцией и функциональным интерфейсом Function<T,U>, который принимает тип T в качестве ввода и создает тип U в качестве вывода.
Технически ваш метод возвращает поставщика, т. е. объект, который не получает параметров и что-то возвращает.
Но в идее это похоже на функцию, потому что вы предоставляете параметр методу, и поставщик, который он создает, зависит от этого параметра.
Тем не менее, это все еще поставщик, потому что после его создания вы всегда будете вести себя одинаково при каждом вызове. Обратите внимание, что поставщику совершенно нормально принимать во внимание внешнюю константу.
В заключение, после использования этого поставщика в вызывающем коде его можно было бы реорганизовать как функцию или имеет смысл сохранить этот метод, который создает поставщика с параметром.