方法参考何时起作用?

时间:2017-04-11 11:17:52

标签: java-8 java-stream method-reference assertj

方法引用不适用于非静态方法AFAIK。我尝试在following way

中使用它们
Arrays.stream(new Integer[] {12,321,312}).map(Integer::toString).forEach(System.out::println);

导致编译错误,如链接中所示。

Picture for error

问题
使用AssertJ库时,我使用了类似的东西,

AbstractObjectAssert<?, Feed> abstractObjectAssertFeed2 = assertThat(feedList.get(2));
abstractObjectAssertFeed2.extracting(Feed::getText).isEqualTo(new Object[] {Constants.WISH+" HappyLife"});

其中Feed是名词而getText是getter方法而不是静态,但它没有编译错误或任何困扰我的错误。

Proof not a static method.

我是否遗漏了有关方法参考如何工作的内容?

1 个答案:

答案 0 :(得分:2)

由于其他原因,这是无效的。

基本上toString中有两个Integer实现。

static toString(int)

/*non- static*/ toString()

意思是你可以像这样编写你的流:

 Arrays.stream(new Integer[] { 12, 321, 312 })
       .map(i -> i.toString(i))
       .forEach(System.out::println);

Arrays.stream(new Integer[] { 12, 321, 312 })
       .map(i -> i.toString())
       .forEach(System.out::println);

这两项都可以通过Integer::toString作为方法参考。第一个是对static method的方法引用。第二个是Reference to an instance method of an arbitrary object of a particular type

由于它们都符合条件,编译器不知道选择哪个。