特定のクラス構造で私のジェネリック型が早すぎて消去されているようです。私ができる限り多くの蒸留問題があります。これは、すべて良いです Javaジェネリックはまだ型キャストを強制します
import java.util.ArrayList;
import java.util.List;
public class Baz {
public static void main(String[] args) {
Bar bar = new Bar();
List<String> list = new ArrayList<>();
list.add("Hello World");
String s = bar.getFirst(list);
}
}
Baz.java
import java.util.List;
public class Bar {
private final Foo foo;
public Bar() {
foo = new Foo();
}
public <T> T getFirst(List<T> list) {
return foo.getFirst(list);
}
}
Bar.java
Foo.java
import java.util.List;
public class Foo {
public <V> V getFirst(List<V> list) {
return (V) privateGetFirst(list);
}
private Object privateGetFirst(List list) {
return list.get(0);
}
}
:これらの3つのクラスを考えてみてください。しかし、私がBar
をpublic class Bar<V>
と定義すると、突然呼び出しの戻り値をbar.getFirst
にキャストすることになりました。返された型のbar.getFirst()
は、String
の代わりにObject
になります。どうして?
ここで何が起こっているのか理解してくれてありがとうございます。
アップデート:ここで
public <T> T invoke(final SerializableCallableIF<T> callable) {
return vm.invoke(callable);
}
:https://github.com/apache/geode/blob/develop/geode-core/src/test/java/org/apache/geode/test/dunit/rules/MemberVM.javaあなたが実際のコードをしたい場合は 、私は、このメソッドを追加しようとしています。 SerializableCallable<String>
でそのメソッドを呼び出すと、キャストする必要はありません。
'Bar'で型パラメータを取るように定義したときに、型パラメータを提供することを覚えましたか? – user2357112
間接的に記述して推測するのではなく、質問があるコードを投稿してください。 –
@ user2357112ああ! 'Bar