下无法编译:为什么Streams API在这种情况下需要泛型类型的提示?
@NotNull String defaultFormatter(@Nullable Object value) {
if (value instanceof Collection) {
return ((Collection) value).stream()
.map(MyClass::defaultFormatter)
.collect(Collectors.joining(eol));
}
return String.valueOf(value);
}
特别是,当用javac编译,错误是:
Error:(809, 94) java: incompatible types:
java.lang.Object cannot be converted to
@org.jetbrains.annotations.NotNull java.lang.String
但以下编译就好:
@NotNull String defaultFormatter(@Nullable Object value) {
if (value instanceof Collection) {
Stream<String> stream = ((Collection) value).stream()
.map(MyClass::defaultFormatter);
return stream.collect(Collectors.joining(eol));
}
return String.valueOf(value);
}
的唯一的区别是我引入了一个额外的变量。请注意,我没有演员,所以没有语义变化。
有人可以解释为什么这是需要的吗?
您是使用'javac'还是IDE的编译器? – Kayaman
这两个IntelliJ IDEA的语法荧光笔,并通过编译与javac确认。 – ddimitrov
可能的重复https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it。请参阅*“原始类型是该类型的擦除”*一节。您需要使用'Collection >'而不是'Collection'。 – Radiodef