1

ジェネリック型を継承し、型を受け取った子クラスに強制することは可能ですか?

何かのようなもの:

class A<GenericType>{}
class B extends A<GenericType>{}

または:

class B <PreciseType> extends A <GenericType>{}

しかし、B で使用される GenericType はどこで定義すればよいのでしょうか?

4

3 に答える 3

2

与えられた

class A<T> {}

何をしようとしているかによって異なりますが、両方のオプションが可能です。

class B extends A<SomeType> {};
B bar = new B();
A<SomeType> foo = bar; //this is ok

class B<T> extends A<T>{}; //you could use a name different than T here if you want
B<SomeType> bar = new B<SomeType>();
A<SomeType> foo = bar; //this is ok too

ただし、最初のケースではSomeTypeは実際のクラス ( などString) であり、2 番目のケースではTはジェネリック型引数であり、型 B のオブジェクトを宣言/作成するときにインスタンス化する必要があることに注意してください。

アドバイスとして、コレクションでジェネリックを使用するのは簡単で簡単ですが、独自のジェネリック クラスを作成する場合は、それらを正しく理解する必要があります。それらの分散特性についていくつかの重要な問題があるため、チュートリアルを注意深く何度も読み、それらを習得してください。

于 2013-01-10T14:07:40.943 に答える
1

A が として宣言されていて、たとえばのみにclass A<T> {}特化したいと仮定すると、それを として宣言できます。Stringclass B extends A<String>

例:

public class A<T> {
    public T get() {
        return someT;
    }
}

public class B extends A<String> {
    public String get() {
        return "abcd";
    }
}
于 2013-01-10T14:14:43.100 に答える
0
class B extends A<GenericType>{}

これは可能です。あなたのクラスは、特定のクラスをパラメーターとして持つBジェネリック クラスを拡張した新しいクラスになり、ジェネリック クラスにはなりません。AB

class B <PreciseType> extends A <GenericType>{}

この場合、Bジェネリック パラメータを持つジェネリック クラスを作成しますPreciseType。このクラスBは の特定のバージョンを拡張しますAが、Aのパラメータは に依存しませんPreciseType

親クラスの指定で使用されるパラメーターを持つジェネリック クラスを作成する場合は、次を使用できます。

class B <PreciseType> extends A <PreciseType>{}
于 2013-01-10T14:09:25.367 に答える