我正在尝试了解之间的区别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(使用前将#替换为@)