getGenericParameterTypes 和 getParameterTypes 之间的区别

2024-02-01

我正在尝试了解之间的区别getGenericParameterTypes and getParameterTypes方法。我知道有人回来了Class[]和另一个Type[]。但真正的区别是什么?

考虑方法:

public void method1(T arg1)
public void method2(String arg2)

调用每个时我会得到什么get方法优于每个示例方法?


我不能确切地告诉你你会得到什么,但一个区别是,对于方法 2,你可以知道参数类型是Class<String>而对于方法 1,你只需要知道有一个名为T,但除了其中的类之外,您不知道确切的类型T被声明将被子类化为一个具体类T.

Example:

class Foo<T> {
   public void method1( T arg1 ) { ... }
}

class Bar extends Foo<Baz> { ... }

Foo<?> foo = new Foo<Baz>();
Bar bar = new Bar();

For foo你将无法获得以下类型T在运行时(你不会知道它是Baz)也不在编译时。为了bar你可以得到的类型T因为它在编译时就已经知道了。

查看代码时的另一个区别:

Calling getGenericParameterTypes()方法 1 应该返回T类型,为方法 2 调用它应该返回Class<String>。但是,如果您致电getTypeParameters()你会得到T方法 1 的类型,方法 2 的零长度数组。

编辑:自从getParameterTypes()的意思是代替getTypeParameters()这是我从代码中看到的区别:

对于方法 2 来说没有什么区别,因为如果签名中没有使用泛型,getGenericParameterTypes()实际上打电话getParameterTypes()。对于方法1getGenericParameterTypes()会返回一个ParameterizedType表明参数有名称T然而getParameterTypes()将返回类型所需的基类,例如Class<Object> for <T> or Class<Number> for <T extends Number>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getGenericParameterTypes 和 getParameterTypes 之间的区别 的相关文章

随机推荐