是否可以继承泛型类型并在子类中强制接收类型?
就像是:
class A<GenericType>{}
class B extends A<GenericType>{}
或者:
class B <PreciseType> extends A <GenericType>{}
但是我在哪里定义 B 中使用的 GenericType?
是否可以继承泛型类型并在子类中强制接收类型?
就像是:
class A<GenericType>{}
class B extends A<GenericType>{}
或者:
class B <PreciseType> extends A <GenericType>{}
但是我在哪里定义 B 中使用的 GenericType?
给定
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 类型的对象时需要实例化。
作为一条建议:在集合中使用泛型简单直接,但如果你想创建自己的泛型类,你真的需要正确理解它们。关于它们的方差属性有一些重要的陷阱,因此请仔细阅读本教程并多次掌握它们。
假设 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";
}
}
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>{}