Ich habe eine Klasse mit einem Konstruktor Signatur wie folgt:Java generische Typen Mismatch Fehler
public class MyClass <U>{
public <T> MyClass(Set<T> data, Function<T,U> func)...
}
ist das in Ordnung. Aber ich möchte den Konstruktor überladen, für den Fall, dass, wenn Sie die Funktion func
nicht bereitstellen, wird einfach (item)->{return item;}
verwendet. Ich habe einen anderen Konstruktor geschrieben, die wie folgt aussieht:
public <T> MyClass(Set<T> data){
this(
data,
(item)->{return item;}
);
}
Dies ist eine Art Konfliktfehler verursacht, weil die Funktion, die ich als Argument an meinem Konstruktor bin mit einem Wert vom Typ nimmt T
und gibt das gleiche Wert, der ein U
sein sollte. Ich verstehe nicht, warum das algebraische System nicht sieht, dass in diesem Fall U und T gleich sind und das ist ok?
Sie haben nicht eine ungeschickte Syntax wie '(item) müssen -> {return Artikel;}', schreiben Sie einfach 'Artikel -> Artikel '. Oder, naja, 'Function.identity()' ... – Holger
Danke @Holger, ich wechselte zu 'Function.identity()' –