Java 泛型 - 这两个方法声明是否等效?

2022-09-04 20:00:22

给定某个类,这两个方法声明是等价的吗?SomeBaseClass

public <T extends SomeBaseClass> void myMethod(Class<T> clz)

public void myMethod(Class<? extends SomeBaseClass> clz)

答案 1

对于呼叫者:是的,它们是等效的。

对于方法内部的代码:否。

不同之处在于,在第一个示例的代码中,您可以使用类型 T(例如,保存 由 创建的对象),而在第二个示例中,则不能。clz.newInstance()


答案 2

不,他们不是。对于第一个定义,您可以在方法定义中使用类型 T,例如,创建或返回 T。对于第二个定义,这是不可能的。ArrayList<T>


推荐