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),而在第二种情况下,T是一个泛型类型参数,在声明/创建B 类型的对象时需要实例化。

作为一条建议:在集合中使用泛型简单直接,但如果你想创建自己的泛型类,你真的需要正确理解它们。关于它们的方差属性有一些重要的陷阱,因此请仔细阅读本教程并多次掌握它们。

于 2013-01-10T14:07:40.943 回答
1

假设 A 被声明为class A<T> {}并且您只想专注于String例如,您可以将其声明为class 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类将是一个新类,它A以特定类作为参数扩展泛型类,而B不是泛型类。

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

在这种情况下,您将创建一个B具有泛型参数的泛型类PreciseType。此类B扩展了 的特定版本A,但A的参数不依赖于PreciseType.

如果你想创建一个泛型类,它有一个在父类规范中使用的参数,你可以使用以下内容:

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