我有以下代码尝试使用Optional类:
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());
我找不到问题所在,有人可以帮忙吗?
谢谢!
答案 0 :(得分:4)
您已将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
。
答案 1 :(得分:0)
字符串是一个对象,但是对象不一定是字符串,因此会出现此错误。试试这个:
public String orelesMethod() {
return "hello";
}
public void test() {
Object value;
value = Optional.ofNullable(null).orElse(orelesMethod());
System.out.println(value);
}
答案 2 :(得分:-3)
Optional<T>
是一种新的(自Java 8起)处理值的方法,该值可能是null
。
您可以通过调用.get()
来获取值。
请注意,在未设置值的情况下调用.get()
会引发NoSuchElementException。
请参阅参考资料:Class Optional
编辑:
此外,orElse()
的返回值将与您在初始化类时的返回值相同。由于这不是字符串,而是null
,因此您不会得到String作为返回值。