Voglio creare una classe che ottiene un oggetto dalla definizione di una classe anonima da archiviare. Ho usato una classe tipizzata generica per ottenere ciò. Quindi voglio definire alcune operazioni usando le interfacce funzionali che ottengono questo oggetto come parametro con cui lavorare.
Il codice dice più delle parole. Quindi, dare un'occhiata a questo:classe anonima come parametro generico
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
});
}
}
mio problema è che o.text nella implementazione dell'interfaccia funzionale non può essere risolto. Questo è un qualche tipo di cancellazione?
La cosa interessante è che riesco a far funzionare questo codice quando implemento l'interfaccia funzionale nel costruttore.
Date un'occhiata a questo codice:
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();
}
}
Questo funziona perfetto e stampa "Qualcosa". Ma cosa c'è di sbagliato nel mio primo approccio? Non ho davvero il problema qui.
nuovo oggetto() { public String text = "Something"; }) – GKislin