問題が発生しました。私は解決策を見つけることができませんでした。ジェネリックスのワイルドカードはGenerictypeにキャストできません
私はしばしば、キーと値が一致するgenerictypesを持つオブジェクトであるマッピングを利用します。各ペアについて、ジェネリックが一致する必要があります。エントリー間のgenerictypesはバリエーションがあるかもしれません。 (明確にするために例が含まれています)。 これは、ワイルドカードを使用して簡単に実行できます。このため、キーや値を組み合わせて使用することはできません。
下の例を考えてみましょう。キャスト例外に実行するようにマップを変更する(簡単な)方法はありません。私はまだuseEntries()
のように地図を使うことができません。だから私の質問は、これのための回避策はありますか?前もって感謝します!
public class GenericWildcardTest
{
static Map<GenericObject<?>, Function<?, ?>> map = new HashMap<>();
public static <S> void put(GenericObject<S> genericObject, Function<S, S> function)
{
map.put(genericObject, function);
}
public static void useEntries()
{
for(Entry<GenericObject<?>, Function<?, ?>> currentEntry : map.entrySet())
//The #apply(); part simply wont compile because of cast errors.
currentEntry.getKey().set(currentEntry.getValue().apply(currentEntry.getKey().get()));
}
// Simple Object with generic.
static class GenericObject<T>
{
private T object;
public GenericObject(T object)
{
this.object = object;
}
public void set(T object)
{
this.object = object;
}
public T get()
{
return this.object;
}
}
}
キャスティングは明らかな回避策です。 – shmosel
私はあなたの記事とあなたの質問に混乱しています。ジェネリックスとワイルドカードを使用しています。このチュートリアルでは、ジェネリックスとワイルドカードを完全にカバーし、あなたの問題を明らかにすることをお勧めします。 [Java™チュートリアル:ジェネリックス(更新済み)](http://docs.oracle.com/javase/tutorial/java/generics/index.html) – Underbalanced
@shmoselあなたは、これをキャストしようとしなかったのですか?それは働かないからです。私はそれ自身のジェネリック実装でプライベートメソッドを作成しようとしました。それはむしろ単純です。 generictypeはワイルドカードにキャストできますが、バイカバーはキャストできません – n247s