0
我創建一些接口作爲一個包的一部分在整數序列的研究,以幫助,並且當我試圖編譯時此:無效方法參考引用聲明接口
package sequences;
import java.util.stream.IntStream;
@FunctionalInterface
public interface IntSequence extends IntegerSequence
{
int term(int n);
default int[] termsInRange(int start, int stop)
{
int[] result = new int[stop - start];
for (int i = 0; i < stop - start; i++)
{
result[i] = term(start + i);
}
return result;
}
/*
* Method "length" is defined in parent interface like so:
* default int length() { return Integer.MAX_VALUE; }
*/
default IntStream fullSequence(int start)
{
IntStream intermediate = start == 0 ? IntStream.range(start, length())
: IntStream.rangeClosed(start, length());
return intermediate.map(IntSequence::term);
}
}
我被拋出這樣的:
PS C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src> javac -d ..\cls -Xdiags:verbose sequences\IntSequence.java
sequences\IntSequence.java:24: error: method map in interface IntStream cannot be applied to given types;
return intermediate.map(IntSequence::term);
^
required: IntUnaryOperator
found: IntSequence::term
reason: argument mismatch; invalid method reference
cannot find symbol
symbol: method term(int)
location: interface IntSequence
1 error
考慮到我的方法term(int)
顯然是一個IntUnaryOperator
,以及與e -> term(e)
導致編譯成功更換方法的參考,我很茫然,爲什麼我得到這個錯誤。
爲了確保,我回頭看了Java教程(Oracle網站上的教程)中的方法參考部分,並且我的類別爲「引用特定類型任意對象的實例方法」,這應該是在格式ContainingType::methodName
。礦井採用這種格式,所以我將其作爲潛在的原因予以消除。
我只是想'這:: term'和它的工作。不過,我很好奇爲什麼我的第一次嘗試沒有。 –