Я хочу создать класс, который получает объект из определения анонимного класса для хранения. Для этого я использовал общий типизированный класс. Затем я хочу определить некоторые операции, используя функциональные интерфейсы, которые получают этот объект в качестве параметра для работы.
Код говорит больше, чем слова. Так что посмотрите на это:анонимный класс как общий параметр
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
});
}
}
Моя проблема заключается в том, что o.text в реализации функционального интерфейса не может быть решена. Это какой-то тип стирания?
Интересно, что я могу заставить этот код работать, когда я реализую функциональный интерфейс в конструкторе.
Посмотрите на этот код:
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();
}
}
Это отлично работает и печатает «нечто». Но что не так с моим первым подходом? У меня действительно не проблема.
новый объект() { public String text = "Something"; }) – GKislin