私が遭遇したケースはCollections.max()
、型消去を望んでいたがObject
、それでも型消去を強制する場合でしたComparable
。あなたはそのように署名を見ることができます:
vlad@vld /tmp $ javap java.util.Collections | grep max
public static java.lang.Object max(java.util.Collection);
public static java.lang.Object max(java.util.Collection, java.util.Comparator);
javap -c
別の方法は、コンパイラーによって実行されたチェックを使用して確認することです。例:
このプログラムの場合:
public class Test{
public static void main(String[]args){
java.util.Vector<String> a = new java.util.Vector<String>();
a.add("Hello world");
System.out.println(a.get(0).length());
}
}
次の結果が得られます。
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2; //class java/util/Vector
3: dup
4: invokespecial #3; //Method java/util/Vector."<init>":()V
7: astore_1
8: aload_1
9: ldc #4; //String Hello world
11: invokevirtual #5; //Method java/util/Vector.add:(Ljava/lang/Object;)Z
14: pop
15: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
18: aload_1
19: iconst_0
20: invokevirtual #7; //Method java/util/Vector.get:(I)Ljava/lang/Object;
23: checkcast #8; //class java/lang/String
26: invokevirtual #9; //Method java/lang/String.length:()I
29: invokevirtual #10; //Method java/io/PrintStream.println:(I)V
32: return
}
に注意してcheckcast
ください。