ich einige Schnittstellen als Teil eines Pakets in der Studie von Integer-Sequenzen unterstützen erstellen, und wenn ich dies zu kompilieren versucht:Ungültige Methode Referenz, wenn Referenzierung Schnittstelle Deklarieren
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);
}
}
Ich war dies geworfen:
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
Anbetracht dessen, dass meine Methode term(int)
ist eindeutig ein IntUnaryOperator
, und dass die Methode Referenz mit e -> term(e)
Ergebnisse bei der erfolgreichen Compilation zu ersetzen, ich bin ratlos, warum ich diesen Fehler bin immer.
Nur um sicher zu gehen, schaute ich zurück auf die Methodenreferenzen im Java-Tutorial (das auf der Oracle-Website) und meins ist in der Kategorie "Referenz auf eine Instanzmethode eines beliebigen Objekts eines bestimmten Typs", Das sollte im Format ContainingType::methodName
sein. Meins ist in diesem Format, also habe ich das als mögliche Ursache eliminiert.
Ich habe gerade versucht 'this :: term' und es hat funktioniert. Trotzdem bin ich neugierig, warum mein erster Versuch nicht ging. –