Ich lerne über FunctionalInterface
, die in Java 8 vorhanden ist. Nachdem ich einige grundlegende funktionale Beispiele gemacht habe, habe ich versucht, dasselbe mit GenericType-Parametern zu tun.Java 8 Generic java.util.Function
public class Main {
public enum LocType {
Area, Country
}
public <T> Function<T, T> getCreateFunction(LocType type) {
AreaService areaService = new AreaService();
CountryService countryService = new CountryService();
switch(type) {
case Area : return areaService::createArea;
case Country : return countryService::createCountry;
default : return null;
}
}
}
public class AreaService {
public Area createArea(Area area) {
// some logic
return area;
}
}
public class CountryService {
public Country createCountry(Country country) {
// some logic
return country;
}
}
// Area & Country are Model Classes
Aber Eclipse Compiler wirft Fehler als
The type AreaService does not define createArea(T) that is applicable here
Ist es nicht möglich, generische Typparameter in FunctionalInterface zu definieren ..?
Sie können keine generische Funktion haben, deren Rückgabetyp von einem Laufzeitparameter abhängt: Rückgabetypen werden zur Kompilierzeit bestimmt; Der Wert des Parameters ist nur zur Laufzeit bekannt. –
Auch sieht mir sehr verdächtig. Das heißt, dieses Generikum beruht auf zwei Arten, aber sie müssen gleich sein. Es sei denn, ich verpasse etwas? EDIT: Warte, ich sehe jetzt, vergiss es. –
Es ist nicht klar, was die Rückgabetypen 'createArea()' und 'createCountry()' sind. Sie können auch 'UnaryOperator' anstelle von 'Funktion ' betrachten (vorausgesetzt, dass das hier korrekt ist). –
shmosel