Guava TypeToken
クラスを使用して、任意のタイプのインスタンスを他のタイプのオブジェクトに割り当てることができるかどうかをテストしています。GuavaのTypeToken.isAssignableFromメソッドの理解
次のコードスニペットではList
として宣言された型がList<String>
からアサインされている場合は、私がテストしていて、その逆:?
TypeToken rawListType = new TypeToken<List>(){};
TypeToken parameterizedListType = new TypeToken<List<String>>(){};
System.out.println(rawListType.isAssignableFrom(parameterizedListType)); //true
System.out.println(parameterizedListType.isAssignableFrom(rawListType)); //false
isAssignableFrom
戻りfalse
になぜ2回目の呼び出し、以下のコードをコンパイルしていること与えられましたので、私は(警告付き)List
からList<String>
を割り当てることができます?
List l = null;
List<String> l2 = null;
l = l2;
l2 = l; //Type Safety Warning
私の直感は、グアバがインあれば答えているということですこれらのタイプの尺度は、警告なしで割り当てることができます(?)。それが正しい場合は、代入可能性をコンパイラの意味でチェックすると、2番目のコードスニペットに表示されているように、別のオブジェクトに(警告の有無にかかわらず)割り当てることができます。
hi @Paul。それは私が探しているものではなく、生の型の割り当て可能性をチェックすれば、リストはリストなどから割り当て可能であり、これは正しくありません。 コンパイラが暗黙のキャストを呪文の後ろに追加しなければならない場合でも、私は割り当て可能性を検証する方法を探しています。 –
Sergio
わかりました - 私の更新を見てください。 –
あなたの解決策は私には正しいようですが、なぜTypeTokenはこれをしないのですか?少なくとも、彼らはjavadocの方法で私が思うように文書化しておくべきです。 – Sergio