を使用してキャストします。このブロックコードは ジェネリックは、私は次のことを理解しようとしたカッコ
[email protected]
[email protected]
次を出力しますので、私は、キャストが正常に完了したと仮定し、私は、リスト内の第二の目的のためにClassCastExceptionが期待しています。
public class TestGenerics
{
public static void main(String[] args)
{
Generic<One> integerGeneric = new Generic<One>(new Container(Lists.<Object>newArrayList(new One(), new Two())));
integerGeneric.checkContainer();
}
static class Generic<T>
{
private Container container;
public Generic(Container container)
{
this.container = container;
}
public void checkContainer()
{
for (Object key : container.getObjects())
{
final T genericKey = (T)key;
System.out.println(genericKey);
}
}
}
static class Container
{
Iterable<Object> objects;
public Container(Iterable<Object> objects)
{
this.objects = objects;
}
public Iterable<Object> getObjects()
{
return objects;
}
}
static class One
{
}
static class Two
{
}
}
P.S. はまた、私は、一般的な型キャスト((T)オブジェクトを使用して)が代わりに例外をスローClassCastExceptiongのnullを返すという問題に直面したが、私はそれを再現傾けます。誰もがこのことを知った場合は、ここでコメントしてください、
あなたは「型消去」は何であるか、それはJavaでどのように機能するかをルックアップする場合があります。 – Tom
私はそこにチェックされていないキャスト警告があることを賭けるつもりです。 –
@Tom、おかげで、私は(それが「存在」がある場合、または最寄りのタイプ)JVMは、オブジェクトの実行時における型のような一般的な参照することを学んだ – Gcinbax