簡體   English   中英

Java 8 收集器<String, A, R>不是一個功能接口,誰能告訴為什么?

[英]java 8 Collector<String, A, R> is not a functional interface, who can tell why?

以下代碼:

public class Test {
    public static void main(String[] args) {
        Stream.of(1, 2, 3).map(String::valueOf).collect(Collectors::toList);
    }
}

IntelliJ 告訴我:

Collector<String, A, R>不是功能接口

但是當我如下修改代碼時,一切正常,不知道為什么?

public class Test {
    public static void main(String[] args) {
        Stream.of(1, 2, 3).map(String::valueOf).collect(Collectors.<String>toList());
    }
}

第一種語法不合法的原因是方法簽名所隱含的目標類型—— Stream.collect(Collector) ——是一個Collector Collector有多個抽象方法,所以不是函數式接口,不能有@FunctionalInterface注解。

Class::functionobject::method這樣的方法引用只能分配給函數式接口類型。 由於Collector不是函數式接口,因此無法使用方法引用為collect(Collector)提供參數。

相反,將Collectors.toList()作為函數調用。 顯式<String>類型參數是不必要的,如果最后沒有括號,您的“工作”示例將無法工作。 這將創建一個可以傳遞給collect()Collector實例。

Collector接口有多個方法( combiner()finisher()supplier()accumulator() )需要一個實現,所以它不能是一個函數式接口,它只能有一個沒有默認實現的方法。

我不明白你的問題與附加的代碼有什么關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM