У меня есть следующий код, пытающийся использовать дополнительный класс:
import java.util.Optional;
// one class needs to have a main() method
public class HelloWorld
{
public String orelesMethod() {
return "hello";
}
public void test() {
String value;
value = Optional.ofNullable(null).orElse(orelesMethod());
System.out.println(value);
}
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
HelloWorld hello = new HelloWorld();
hello.test();
}
}
При компиляции он говорит:
incompatible types: Object cannot be converted to String
value = Optional.ofNullable(null).orElse(orelesMethod());
Не могу разобраться в чем проблема, может кто-нибудь помочь с этим?
Спасибо!
3 ответа
Вы определили value
для типа String
, но Optional.ofNullable(null)
возвращает Optional<Object>
, потому что любой тип объекта может быть null
, и вы не указали фактический тип. Затем вы вызываете orElse
для объекта типа Optional<Object>
, и поскольку T
равен Object
, метод orElse
возвращает объект типа Object
который не может быть преобразован в String
.
Поэтому вам нужно указать тип при вызове ofNullable
:
value = Optional.<String>ofNullable(null).orElse(orelesMethod());
Вы также можете использовать метод orElseGet
, чтобы не вызывать orelesMethod
, если необязательный параметр содержит значение.
Optional<T>
- это новый (начиная с Java 8) способ обработки значений, которые могут быть null
.
Вы получаете значение, вызывая .get()
.
Обратите внимание, что вызов .get()
без установленного значения вызывает исключение NoSuchElementException.
См. Ссылку: Класс необязательный
Редактировать:
Кроме того, возвращаемое значение вашего orElse()
будет соответствовать времени инициализации класса. Поскольку это не строка, а null
, вы не получите строку в качестве возврата.
String - это Object, но Object не обязательно является String, и, следовательно, эта ошибка. Попробуй это :
public String orelesMethod() {
return "hello";
}
public void test() {
Object value;
value = Optional.ofNullable(null).orElse(orelesMethod());
System.out.println(value);
}
Новые вопросы
java
Java - это популярный язык программирования высокого уровня. Используйте этот тег, если у вас есть проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [gradle] и [maven].