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 回答