匿名クラス定義から格納するオブジェクトを取得するクラスを作成します。私はそれを達成するためにジェネリック型のクラスを使いました。次に、このオブジェクトを操作するパラメータとして取得する機能的インタフェースを使用して、いくつかの操作を定義します。
コードは言葉以上のことを言います。だから、これを見て:汎用パラメータとしての匿名クラス
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