给定一些类SomeBaseClass
。这两个方法声明是否等价?Java泛型 - 这两个方法声明是否等价?
public <T extends SomeBaseClass> void myMethod(T param)
和
public void myMethod(<? extends SomeBaseClass> param)
给定一些类SomeBaseClass
。这两个方法声明是否等价?Java泛型 - 这两个方法声明是否等价?
public <T extends SomeBaseClass> void myMethod(T param)
和
public void myMethod(<? extends SomeBaseClass> param)
不,这些都不是等价的。第二个不会编译,因为它没有任何意义(为什么你会在这种情况下使用泛型?)
Argg !!!应该有使用复制复制粘贴+ ;-) – Udo 2011-04-20 13:08:57
公共
正确的问题是[这里](http://stackoverflow.com/questions/5730929/java-generics-are-these-two-method-declarations-equivalent-correct-version) – Udo 2011-04-20 13:16:31
正如其他人所说,? extends SomeBaseClass
是不是一种类型,并没有什么意义。但是,您真的可以在那里放置SomeBaseClass
,因为任何作为SomeBaseClass
的子类的实例的继承都是SomeBaseClass
的实例。
所以,从某人调用这些函数的角度看,(因为T
仅使用一次,并且因此具有对其他类型的无约束作用),下面的两个在功能上是等效的:
public <T extends SomeBaseClass> void myMethod(T param)
和
public void myMethod(SomeBaseClass param)
但是,请注意,这两个将出现不同于反射。另外,函数内部可能有一些需要用于泛型T
的函数,所以在某些情况下可能需要第一种形式(尽管在这种情况下仍然可以为第二种形式编写包装)。
-1甚至没有试图编译它。 – Ingo 2011-04-20 09:29:03
我不认为你可以在那里做第二件事。可能希望用'List'或者其他东西来包装它(例如:'List <?extends SomeBaseClass>')。 – 2011-04-20 09:31:35