本帖最后由 Silvester 于 2014-4-26 18:08 编辑
第一个问题:
本来void前面那个<T>是放在该方法所在的类名后面的,为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
假设swap方法所属类为A,而swap方法实现的是交换数组i,j位置的元素(对象),可以假设类A中还有其他的方法如swap01( )、swap02( )......如果<T>放在类A的后面,那么当创建一个A的对象a以后,如果定义其类型为<int>,那么在使用其中的swap、swap01、swap02等方法时候的类型必须都是int。为了让对象a能调用这三个方法时使用不同的类型,比如swap方法用int,swap01方法用String,swap02用boolean,所以把<T>定义在方法上而不是类A的后面。至于用<T>还是用<?>,看你调用时候的类型了,<T>是固定的泛型,<?>只要是Object类的子类就行,使用<T>表示类型已经确定了,使用<?>类型不确定的话可以用。
第二个问题:
具体的也不是太明白,但个人的理解是Java不支持声明泛型数组,数组的类型不可以是类型变量,但采用通配符的方式,如果泛型数组作为参数传递时候,当你调用该方法的时候其实数组的类型是已经确定了的,传到swap方法的时候数组已经不再是泛型的了。
希望能对楼主有用。
|