2

理論的には、サブクラス メソッドの入力パラメーターは、スーパークラスの入力パラメーターと同等であるか、それよりも制限が少ない (反変) 必要があります。

私がやりたいことは、基本的にAジェネリックバインディングを持つクラスを作成しますが、ジェネリックバインディングなし<T extends SomeType>でサブクラスを作成するBことです(任意のタイプを許可する必要があります)<T>

    class A<T extends SomeType> {....}

    class B<T> extends A<T extends SomeType> { ..... }

これはJavaでも可能ですか、それとも理論的な観点からは正しいですか?

4

2 に答える 2

5

いいえ、それは正しくありません。で宣言されAているメソッドを考えてみましょうT:

abstract class A<T extends SomeType> {

    abstract T foo();
}

Aそのクラスによって宣言された境界に準拠することが期待されるように静的に型指定されたオブジェクト:

A<?> a = ...;
SomeType someObject = a.foo();

しかし、Bこれらの境界をなくす場合:

abstract class B<T> extends A<T> { }

class C extends B<String> {

    @Override
    String foo() {
        return "foo";
    }
}

私たちは混乱しています:

A<?> a = new C();
SomeType someObject = a.foo(); // ???
于 2012-11-14T03:42:08.237 に答える
0

あなたの質問は、主にいくつかの用語の誤った使用のためにかなり混乱していますが、私が正しく理解していれば、次の例はあなたがやりたかったことのように見えます:

class A<T extends CharSequence> { }
class B extends A<String> { }

したがって、あなたの質問によると、クラス A には CharSequence の上限を持つ型パラメーターがありますが、クラス B (A を拡張する) には型パラメーターがまったくありません。

于 2012-11-14T04:50:47.690 に答える