Hallo allerseits,
ich versuche gerade Funktoren/Funktionsobjekte mit Java zu realsieren, schein hier aber etwas an den Generics zu scheitern und bekomm immer nur Compilefehler.
Da ich deshalb glaub schon bald dem Wahnsinn nahe bin, dacht ich mir, ich frag hier mal in die Runde, ob mir jemand weiterhelfen kann und mir vielleicht sagen kann, wo genau mein Denkfehler liegt und wie man das ändern muss (Code siehe unten).
Ganz lieben Dank schon im Voraus für Eure Hilfe.
Liebe Grüsse
Natascha
abstract class UnaryFunction {
public abstract R apply(T value);
}
// Diese relativ merkwürdige Klasse ist nur als Beispiel gedacht
class ValueWrapper {
protected T val;
public ValueWrapper(T value) {
this.val = value;
}
public R map(UnaryFunction f) {
return f.apply(this.val);
}
}
public class FunctorTest {
public static void main(String[] args) {
ValueWrapper valueWrapper = new ValueWrapper("Hallo");
// Dieser Funktor soll wirklich auf ALLE Objekte anwendaber sein,
// nicht nur auf Strings.
UnaryFunction upperCase = new UnaryFunction() {
public String apply(Object x) {
return ("" + x).toUpperCase();
}
};
// Hier sollte eigentlich "HALLO" ausgegeben werden.
// Stattdessen kommt hier folgender Compilefehler:
// "map(UnaryFunction) in ValueWrapper
// cannot be applied to (UnaryFunction)
// System.out.println(valueWrapper.map(upperCase));
// ^
// 1 error"
System.out.println(valueWrapper.map(upperCase));
}
}