Chcę utworzyć klasę, która pobiera obiekt z anonimowej definicji klasy do przechowywania. Użyłem ogólnej klasy, aby to osiągnąć. Następnie chcę zdefiniować niektóre operacje przy użyciu funkcjonalnych interfejsów, które pobierają ten obiekt jako parametr do pracy.
Kod mówi więcej niż słowa. Więc spójrz na to:anonimowa klasa jako parametr ogólny
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
});
}
}
Mój problem polega na tym, że o.tekst w implementacji interfejsu funkcjonalnego nie może zostać rozwiązany. Czy to jakiś rodzaj skutku wymazania?
Interesujące jest to, że mogę uzyskać ten kod działający po wdrożeniu funkcjonalnego interfejsu w konstruktorze.
Wystarczy popatrzeć na ten kod:
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();
}
}
Działa to doskonały i drukuje się „coś”. Ale co jest nie tak z moim pierwszym podejściem? Naprawdę nie mam tutaj problemu.
nowy obiekt() { public String text = "Something"; }) – GKislin