Ich habe eine Klasse, die eine Schnittstelle Objekt im Konstruktor hat:Java generic Lambda Anruf
private Operator(/* ..., */ final Operation<?> operation) {
//...
}
Betrieb ist eine generische Schnittstelle mit einer Methode:
@SuppressWarnings("unchecked")
public T applyOperation(T... arguments);
ich ein Objekt jetzt erstellen der Klasse Operator so:
public static final Operator POSTFIX_INCREASE = new Operator(/* ...,*/ new Operation<Integer>() {
@Override
public Integer applyOperation(Integer... arguments) {
return arguments[0]++;
}
});
Aber ich möchte dies mit einem Lambda-Ausdruck. Dies ist, was Eclipse selbst reconmends (Und es sieht so weit gut):
public static final Operator POSTFIX_INCREASE = new Operator("++", 0, 1, true, arguments -> arguments[0]++);
Das einzige Problem ... Es funktioniert nicht: D Natürlich weiß ich, ich brauche Typinformationen zur Verfügung zu stellen: Ich brauche eine ganze Zahl Implementierung der Bedienerschnittstelle. In der anonymen Klasse kann ich einfach den Standardweg angeben, aber in einem Lambda-Ausdruck ist dies nicht möglich. Gibt es eine Möglichkeit, einen generischen Lambda-Ausdruck zu schreiben, oder unterstützen sie das nicht? (was keine große Überraschung sein würde, da Generika in Java nicht sehr flexibel ist) wird mit
einen expliziten Typ Geben Sie für 'arguments' –
Wie meinen Sie das? Die Variablenargumente in der Schnittstelle müssen generisch sein. Oder meinst du den Aufruf von Argumenten im Lambda-Ausdruck? Denn dann möchte ich wissen, wie man explizite Argumente liefert – Cydhra
Java weiß nicht, was der Typ von 'Argumente' sein soll. Es kann nicht von irgendwo her schließen. Verwenden Sie '(Integer ... Argumente) -> ...' zum Beispiel. –