一般来说,泛型方法的类型参数都是靠形参或者返回值赋值推断出来的(一般多为靠形参推断),但是也可以显示地给泛型方法以类型说明。所以本文就讲一下如何给泛型方法以显式的类型说明。
class One<T> {
<T> void memberF(T t) {
System.out.println(t);
}
static <T> void staticF(T t) {
System.out.println(t);
}
void testF() {//One类定义内部
this.<String>memberF("str");//调用成员泛型方法
One.<String>staticF("str");//调用静态泛型方法
}
}
public class test {//One类定义外部
public static void main(String[] args) {
One<Integer> o = new One<Integer>();
o.<String>memberF("str");//调用成员泛型方法
One.<String>staticF("str");//调用静态泛型方法
o.testF();
}
}
首先说下非静态即成员的泛型方法:
- 在类定义外部,需要通过对象来调用成员方法,而显示类型说明则在
.
和方法名
之间,形如o.<String>memberF("str")
。 - 在类定义内部,本来可以直接调用成员方法的,但现在需要通过脱裤子放屁的this来调用成员方法,因为这样显示类型说明就可以在在
.
和方法名
之间了,形如this.<String>memberF("str")
。
然后说下静态的泛型方法:
- 在类定义外部,必须通过类名来调用静态方法,而显示类型说明则在
.
和方法名
之间,形如主函数里的One.<String>staticF("str")
。 - 在类定义内部,本来可以直接调用静态方法的,但现在需要通过脱裤子放屁的类名来调用静态方法,因为这样显示类型说明就可以在在
.
和方法名
之间了,形如testF函数里的One.<String>staticF("str")
。 - 我知道也可以通过对象名或this来调用静态方法,但这种不推荐的方式我不想强调了。