泛型
1.概述
泛型
1.概述
泛型,即“参数化类型”,总所周知当我们在写方法时,又可能会用到形参,然后在调用方法时从传递实参。参数化类型就是在把具体类型(int,String,引用类型…)参数化,然后在调用它时传递具体的类型进去。
举个例子
package com.zhy.blog;
public class Example {
public static void show(int n){
System.out.println(n);
}
public static void main(String[] args) {
show("t");
show(2);
}
}
//java: 不兼容的类型: java.lang.String无法转换为int
在这里会发现这个方法会报错,因为这个方法的形参应该是int型而不是String型。
那么倘若以后我们要调用某一个方法因为给入参数不一样,岂不是要重构无数个方法?
java考虑到了这种情况,所以给出了泛型的使用。
public class Example{
public static void main(String[] args) {
Test<String> t1 = new Test();
Test<Integer> t2 = new Test<>();
t1.show("你好");
t2.show(3);
}
}
class Test<T> {
public void show(T n) {
System.out.println(n);
}
}
泛型的参数化类型只能是类类型(包括自定义类),不能是简单类型。
那么定义的泛型必须传入一个泛型类型实参吗?
并不是,倘若没有传入泛型实参,那么调用使用泛型的方法时可以传入任意类型。
package com.zhy.blog;
public class Example{
public static void main(String[] args) {
Test t1 = new Test();
Test<Integer> t2 = new Test<>();
t1.show("你好");
t1.show(1);
t2.show(3);
}
}
class Test<T> {
public void show(T n) {
System.out.println(n);
}
}
//你好
//1
//3
泛型方法的使用
上面的方法并不是泛型方法,只是泛型类中的成员方法
package com.zhy.blog;
public class Example{
public static void main(String[] args) {
Test t1 = new Test();
t1.show(1);
t1.show("你好");
}
}
class Test {
public <T> void show(T n) {
System.out.println(n);
}
}
//1
//你好
这种才是泛型方法的正确使用