Java泛型——这两种方法声明是等价的吗?

Java泛型——这两种方法声明是等价的吗?,java,generics,Java,Generics,给定一些类SomeBaseClass。这两个方法声明等效吗 public <T extends SomeBaseClass> void myMethod(T param) public void myMethod(T参数) 及 public void myMethod(No,它们不是等价的。第二个甚至不会编译,因为它没有任何意义(在这种情况下为什么要使用泛型?)正如其他人所提到的,扩展SomeBaseClass不是一种类型,在那里没有任何意义。但是,你可以把SomeBaseCl

给定一些类
SomeBaseClass
。这两个方法声明等效吗

public <T extends SomeBaseClass> void myMethod(T param) 
public void myMethod(T参数)


public void myMethod(No,它们不是等价的。第二个甚至不会编译,因为它没有任何意义(在这种情况下为什么要使用泛型?)正如其他人所提到的,
扩展SomeBaseClass
不是一种类型,在那里没有任何意义。但是,你可以把
SomeBaseClass
放在那里,因为任何作为
SomeBaseClass
子类实例的东西,通过继承,也是
SomeBaseClass
的实例

因此,从调用这些函数的人的角度来看,(因为
T
只使用一次,因此对其他类型没有约束作用),以下两个函数在功能上是等效的:

public <T extends SomeBaseClass> void myMethod(T param)

但是,请注意,这两种形式与反射不同。此外,函数内部可能需要泛型类型
T
,因此在某些情况下可能需要使用第一种形式(尽管在这种情况下仍可以使用第二种形式为其编写包装器).

-1感谢您甚至没有尝试编译它。我认为您不能在那里做第二件事。您可能想用
List
或其他东西(例如:
Listpublic void retrieve(字符串键,类clz)public void myMethod)来包装它(类正确的问题是
public <T extends SomeBaseClass> void myMethod(T param)
public void myMethod(SomeBaseClass param)