Я пытаюсь получить сертификат IZO-809, я читал тестовую книгу OCA / OCP SE8, и код действительно привлек мое внимание.
Код заставляет меня ответить на этот вопрос.
Я знаю, что потребитель получает параметр и ничего не возвращает, а поставщик не имеет параметров и возвращает значение.
Но этот код почти такой же после ->.
public class Pregunta24{
private final Object obj;
public Pregunta24(final Object obj){
this.obj = obj;
}
}
//Returns a Supplier
private final Supplier<Pregunta24>supplier = ()->new Pregunta24("HI");
//Returns a Consumer.
private final Consumer<Pregunta24>consumer = a->new Pregunta24(a);
Оба кода работают.
Но если этот код не работает, я знаю, что потребитель не возвращает ничего.
private final Consumer<String>consumerString = String::length
Я знаю, что это не работает, потому что потребитель не возвращает значение, мой вопрос в коде поставщика ипотребительский код, код находится сразу после знака ->, но на этот раз считается возвращаемым фактически экземпляром класса.
Мой вопрос: почему иногда Java жалуется, что это возвращаемое значение, а что-то нет?
Я имею в виду этот код.
private final Supplier<Pregunta24>supplier = ()->new Pregunta24("HI");
// I would think is returning a instance of the Pregunta24 class.
private final Consumer<Pregunts24>consumer = a->new Pregunta24(a);
Возвращает то же самое после ->, но почему в потребителе не говорят об ошибке.
incompatible types: bad return type in lambda expression
Но если я делаю это, я делаю
final Consumer<String>consumerString = a->1;
I-йвведите код после -> выводится контекст
Извините, если вопрос прост.
С наилучшими пожеланиями из Венесуэлы.