Java8 ruft Lambda Setter aus der Klasse ab

8

Ich versuche, eine Lambda-Methode Handle für den Setter eines privaten Feldes zu bekommen, aber aus irgendeinem Grund kann der Setter nicht gefunden werden.

Dies ist die funktionale Schnittstelle, die ich verwende:

%Vor%

Und das ist die Methode, um den Setter zu holen:

%Vor%

Alle Setter haben per Konvention den gleichen Namen: "setField (...)". Das ist meine Testklasse:

%Vor%

Aber wenn ich diese Methode für "id" und "Long.class" ausführe, bekomme ich die folgende Ausnahme:

%Vor%

Ich verstehe nicht, woher dieser Fehler kommt. Die Methode "void setId (Long)" existiert.

%Vor%

Und der Anruf:

%Vor%     
Cyclonit 14.05.2017, 18:33
quelle

1 Antwort

8

Es gibt ein paar Fehler in Ihrem Code.

Zuerst verwenden Sie Void.class , stattdessen sollten Sie void.class verwenden.

Zweitens, func.generic gibt (Object,Object)Object zurück, was Sie wirklich wollen, ist func.erase , daher wird der Rückgabetyp beibehalten ( (Object,Object)void ).

Drittens, es ist ratsam, keine rohen Typen zu verwenden, stattdessen würde ich die folgende Implementierung vorschlagen:

%Vor%

Was für mich funktioniert: Ссылка

    
Jorn Vernee 14.05.2017, 19:02
quelle

Tags und Links