爲什麼不能編譯?方法參考不編譯 - 整數::新
它給人的錯誤
令牌語法錯誤的 「新」,AssignmentOperator預計此令牌
當然,我可以重寫這個表達式後
Stream.generate(() -> new Integer(1)).limit(10);
但我想知道第一個陳述失敗的原因...
爲什麼不能編譯?方法參考不編譯 - 整數::新
它給人的錯誤
令牌語法錯誤的 「新」,AssignmentOperator預計此令牌
當然,我可以重寫這個表達式後
Stream.generate(() -> new Integer(1)).limit(10);
但我想知道第一個陳述失敗的原因...
您不能將參數明確地傳遞給方法引用。他們只能隱式傳遞。
例如,如果你有一個IntStream
,可以將其使用public Integer(int value)
構造的方法參考mapToObj
到Integer
實例:
IntStream.of(1,1,1).mapToObj(Integer::new)...
當然,使用public Integer(int value)
構造爲小int
值通常一不好的想法,因爲它可能會導致創建所有具有相同值的不必要的多個實例,而不是利用IntegerCache
,它們緩存小值(-128到127)的實例。
您不能爲方法引用提供附加參數。所以你必須改用lambda表達式。但是使用Integer的構造函數無論如何都是荒謬的。您可以使用'Stream.generate(( - ) - > 1)... – Holger
因爲'Integer :: new(1)'不是有效的方法/構造函數引用。 [JLS](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.13) – Flown