インターフェイスがあるとします
interface Foo<T> {
void foo(T x);
T bar()
}
および不明なパラメーターを持つこのタイプのオブジェクト: Foo<?> baz
。その後、私は呼び出すことができますbaz.foo(baz.bar())
。
ただし、値をコレクションに入れ、後でbaz.bar()
呼び出す必要があります。baz.foo()
何かのようなもの
List<???> list; // can I tell the compiler this is the same type as baz's wildcard?
list.add(baz.bar());
...
baz.foo(list.get(1));
これも機能しません:
List<Object> list;
list.add(baz.bar());
...
baz.foo((???) list.get(1)); // I can't write down the type I need to cast to
これを行う方法はありますか?
編集:上記は私の実際の状況から単純化されすぎています。私たちが持っていると言う
class Bar {
private final Foo<?> foo;
private List<???> list; // the type argument can be selected freely
Bar(Baz baz) {
foo = baz.getFoo(); // returns Foo<?>, can't be changed
}
void putBar() {
list.add(foo.bar());
}
void callFoo() {
foo.foo(list.get(0));
}
}