Java 泛型:Foo<T>、Foo、Foobar<T extends Foo<T>> 和 Foobar<T extends Foo>
Java Generics: Foo<T>, Foo, Foobar<T extends Foo<T>> and Foobar<T extends Foo>
在 Java 泛型中,给定一个泛型 class/interface Foo<T>
,
声明一个新的泛型 class 有什么区别:
Foobar<T extends Foo<T>>
或简单地 Foobar<T extends Foo>
,为什么我可以实例化泛型 class Foo<T>
而无需实例化类型参数 T
?,即为什么我可以编写以下内容:
Foo var = new Foo();
,这是否意味着class是用一个对象实例化的,通过它我只能使用非泛型方法?
如果问题不是很清楚,请原谅我,我正在处理的示例如下:
MyClass<T extends Comparable<T>>
class Foo<T> {}
是你的class.
Foo yourVariable = new Foo();
等于Foo<Object> yourFoo = new Foo<Object>();
class Foobar<T> extends Foo {}
等于class Foobar<T> extends Foo<Object> {}
问题的答案
class YourClass<T extends Comparable<T>> {}
意味着 YourClass 的类型 T
能够将自身与 T 的 对象(它的 class)进行比较,而
class YourClass<T extends Comparable> {}
的类型 T
能够将自身与 class 对象 的 对象进行比较,这不是您想要的
在 Java 泛型中,给定一个泛型 class/interface Foo<T>
,
声明一个新的泛型 class 有什么区别:
Foobar<T extends Foo<T>>
或简单地 Foobar<T extends Foo>
,为什么我可以实例化泛型 class Foo<T>
而无需实例化类型参数 T
?,即为什么我可以编写以下内容:
Foo var = new Foo();
,这是否意味着class是用一个对象实例化的,通过它我只能使用非泛型方法?
如果问题不是很清楚,请原谅我,我正在处理的示例如下:
MyClass<T extends Comparable<T>>
class Foo<T> {}
是你的class.
Foo yourVariable = new Foo();
等于Foo<Object> yourFoo = new Foo<Object>();
class Foobar<T> extends Foo {}
等于class Foobar<T> extends Foo<Object> {}
问题的答案
class YourClass<T extends Comparable<T>> {}
意味着 YourClass 的类型 T
能够将自身与 T 的 对象(它的 class)进行比较,而
class YourClass<T extends Comparable> {}
的类型 T
能够将自身与 class 对象 的 对象进行比较,这不是您想要的