Ich möchte eine Klasse erstellen, die ein Objekt aus anonymer Klassendefinition zum Speichern erhält. Ich habe eine generische typisierte Klasse verwendet, um das zu erreichen. Dann möchte ich einige Operationen definieren, die funktionale Schnittstellen verwenden, die dieses Objekt als einen Parameter erhalten, mit dem ich arbeiten kann.
Code sagt mehr als Worte. So haben Sie einen Blick auf diese:anonyme Klasse als generischer Parameter
public class Test<T> {
@FunctionalInterface
public interface operation<T> {
void execute(T object);
}
private T obj;
public Test(T _obj){
obj = _obj;
}
public void runOperation(operation<T> op){
op.execute(obj);
}
public static void main(String[] args){
Test<?> t = new Test<>(new Object(){
public String text = "Something";
});
t.runOperation((o) -> {
System.out.println(o.text); // text cannot be resolved
});
}
}
Mein Problem ist, dass o.text bei der Umsetzung der funktionalen Schnittstelle kann nicht aufgelöst werden. Ist das eine Art von Löschungsfolge?
Die interessante Sache ist, dass ich diesen Code arbeiten kann, wenn ich die funktionale Schnittstelle im Konstruktor implementiere.
Werfen Sie einen Blick auf diesen Code:
public class Test<T> {
@FunctionalInterface
public interface operation<T> {
void execute(T object);
}
private T obj;
private operation<T> op;
public Test(T _obj, operation<T> _op){
obj = _obj;
op = _op;
}
public void runOperation(){
op.execute(obj);
}
public static void main(String[] args){
Test<?> t = new Test<>(new Object(){
public String text = "Something";
}, (o) -> {
System.out.println(o.text);
});
t.runOperation();
}
}
Diese perfekte und druckt "Something" funktioniert. Aber was ist los mit meiner ersten Annäherung? Ich verstehe das Problem hier wirklich nicht.
neues Objekt() { public String text = "Etwas"; }) – GKislin