2012-05-09 7 views

答えて

8

Type erasureは、List.classしか渡すことができないことを意味します。

リンクドキュメントから:

ジェネリック型がインスタンス化されると、コンパイラは型消去と呼ばれる技術により、これらの種類を変換 - コンパイラが内部パラメータと型引数を入力するために関連するすべての情報を削除するプロセスをクラスまたはメソッド。型消去は、ジェネリックを使用するJavaアプリケーションが、ジェネリックより前に作成されたJavaライブラリおよびアプリケーションとのバイナリ互換性を維持することを可能にします。は、Box型に変換されます。これは、生の型と呼ばれます。生の型は、型引数を持たない汎用クラスまたはインタフェース名です。これは、ジェネリッククラスが実行時に使用しているオブジェクトのタイプを見つけることができないことを意味します。次の操作ができません:コンパイラがコンパイル時に(typeパラメータEによって表される)実型引数に関するすべての情報を削除するため

public class MyClass<E> { 
    public static void myMethod(Object item) { 
    // Compiler error 
    if (item instanceof E) { 
     ... 
    } 
    E item2 = new E();  // Compiler error 
    E[] iArray = new E[10]; // Compiler error 
    E obj = (E)new Object(); // Unchecked cast warning 
    } 
} 

太字で示す動作は、実行時に無意味です。

0

intListに渡すことはできません。 ここにTObjectから拡張する必要があります。

Integerは、Objectから拡張されているが、intではない。

+3

Javaには「Int」はありません。「int」と「Integer」のみが使用できます。 – home

+0

これについて再確認していただきありがとうございます。 :)答えを修正します。しかし、主なアイデアは私が言ったことです。 :) – nnhthuan

関連する問題