我有以下代码:
class inner {
Integer i;
public Integer getValue() {
return i;
}
public void setValue(Integer i) {
this.i = i;
}
}
class outer {
public static inner i1;
outer(Integer i) {
i1.setValue(i);
}
}
public class MyClass{
public void main() {
List<Integer> ll = Arrays.asList(new outer(2)).stream().map(outer.i1::getValue).collect(Collectors.toList());
}
我收到以下错误:
required: Function<? super Object,? extends R>
found: outer.i1::getValue
reason: cannot infer type-variable(s) R
(argument mismatch; invalid method reference
method getValue in class inner cannot be applied to given types
required: no arguments
found: Object
reason: actual and formal argument lists differ in length)
where R,T are type-variables:
R extends Object declared in method <R>map(Function<? super T,? extends R>)
我是溪流的新手,阅读文档并不能解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:4)
getValue
是一个不带参数的方法。
当您尝试将getValue
的方法引用传递给Stream
的{{1}}方法时,您试图将map
的元素传递给Stream
,但是getValue
没有任何论据。
如果您想忽略Stream的getValue
元素,可以用lambda表达式替换方法引用:
outer
但是,这会导致List<Integer> ll = Arrays.asList(new outer(2)).stream().map(o -> outer.i1.getValue()).collect(Collectors.toList());
,因为您没有在任何地方初始化NullPointerException
,因此调用public static inner i1
构造函数会抛出该异常。
很难在不知道你想要做什么的情况下建议如何解决这个问题。
我不知道在outer
类中是否有一个inner
类型的静态成员是有意义的,但是如果它有意义,你应该在静态初始化块中初始化它(或在其声明中。)
例如,您可以更改
outer
到
public static inner i1;
将消除异常。