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)