8

私は行く宣言、インターフェース、クラスを見てきましたTYPE<CLASS>

これはどういう意味/意味ですか?

4

4 に答える 4

23

証拠がなければ、あなたはJavaのジェネリックスのサポートについて話していると思います...

ジェネリックスを使用すると、型を抽象化できます

Java 5以前は、特定の状況ごとにコーディングしなくても、複数の異なるタイプのオブジェクトをサポートできるクラスを提供することは困難でした。そのため、Object代わりに渡すのが一般的でした。

これにより、実行時に多くの難しい選択を行うことになります。たとえば、特定のオブジェクトを使用可能なタイプにキャストできるかどうかを確認するために、実行時チェックを実行する必要があります。

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3    

さて、これはかなり明白ですが、もしあなたがただ渡されたならList、あなたはリストのすべての要素が正しいかどうかをチェックしなければならないでしょう...

しかし今、私たちはこれを行うことができます...

List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'

これは基本的に「このリストには整数型のオブジェクトのみが含まれている」という契約です。

ジェネリックスを使用すると、複数の異なるデータ型またはデータ型のファミリーを処理できる単一のクラスを構築できます(つまり、特定の親型から拡張する必要があるようにパラメーターを制約します)。

Iterator<? extends Number> itNum;

基本的に、これには、から継承するオブジェクトが含まれ、、、、、..NumberInteger含まれます。LongDoubleFloat

多くの場合、メソッドとクラスの減速では、次のようなものが表示されます...

public class MyGenericClass<T> {...}

また

public class MyGenericClass<T extends MyBaseObject> {...}

これによりT、たとえば、具体的なオブジェクトタイプであるかのように参照できます。

public class MyGenericClass<T extends MyBaseObject> {
    private T value;
    public MyGenericClass(T value) {
        this.value = value;
    }
}

これにより、コンパイラー(およびJVM)は、基本的にマーカーをコンサートタイプに「置き換える」ことができますT(わかりました、それよりも少し複雑ですが、それは魔法です)...

これにより、次のようなことができます...

... new MyGenericClass<MySuperObject>(new MySuperObject());
... new MyGenericClass<MySuperSuperObject>(new MySuperSuperObject());

そして、それは私が指定したオブジェクトのタイプのみを受け入れることを知っています...

最初の段落のリンクを読んでください、私ができるよりももっと正義を行うことができると確信しています;)

于 2012-09-29T03:06:46.350 に答える
9
public class Grid<E> {

これが、Javaでジェネリッククラスを定義する方法です。GridはクラスでEあり、正式な型パラメータです。

あなたがそれについて学ぶことに本当に興味があるなら、あなたはここで非常に良いリファレンスを見つけるでしょう-JavaGenericsFAQ-よくある質問

于 2012-09-29T03:05:36.480 に答える
3

つまり、ジェネリック型はここで確認してください。簡単な例は

List<String>

Map<Integer, String>
于 2012-09-29T03:05:15.400 に答える
1

あなたが何を見ているのかを正確に見ずに、あなたが何を求めているのかは不明確です。しかし、JavaでGenericsが表示されている可能性があります。詳細はこちら

アイデアは基本的にJavaでより強力な型安全性を作ることです。したがって、List<Integer> intListmeansのような宣言にintListは整数が含まれます。そして、たとえば文字列を入れようとすると、コンパイルエラーがスローされます。

于 2012-09-29T03:06:36.290 に答える