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%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: Ссылка
Tags und Links java java-8 lambda reflection