3.1泛型概述和好处【理解】
泛型概述
是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型
它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口
泛型定义格式
:指定一种类型的格式。这里的类型可以看成是形参
:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参
将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型
泛型的好处
把运行时期的问题提前到了编译期间
避免了强制类型转换
3.2泛型类【应用】
定义格式
修饰符 class 类名 { }
示例代码
泛型类
public class Generic {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
测试类
public class GenericDemo {
public static void main(String[] args) {
Generic g1 = new Generic();
g1.setT("林青霞");
System.out.println(g1.getT());
Generic g2 = new Generic();
g2.setT(30);
System.out.println(g2.getT());
Generic g3 = new Generic();
g3.setT(true);
System.out.println(g3.getT());
}
}
3.3泛型方法【应用】
定义格式
修饰符 返回值类型 方法名(类型 变量名) { }
示例代码
带有泛型方法的类
public class Generic {
public void show(T t) {
System.out.println(t);
}
}
测试类
public class GenericDemo {
public static void main(String[] args) {
Generic g = new Generic();
g.show("林青霞");
g.show(30);
g.show(true);
g.show(12.34);
}
}
3.4泛型接口【应用】
定义格式
修饰符 interface 接口名 { }
示例代码
泛型接口
public interface Generic {
void show(T t);
}
泛型接口实现类
public class GenericImpl implements Generic {
@Override
public void show(T t) {
System.out.println(t);
}
}
测试类
public class GenericDemo {
public static void main(String[] args) {
Generic g1 = new GenericImpl();
g1.show("林青霞");
Generic g2 = new GenericImpl();
g2.show(30);
}
}
4.可变参数
4.1可变参数【应用】
可变参数介绍
可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
可变参数定义格式
修饰符 返回值类型 方法名(数据类型… 变量名) { }
可变参数的注意事项
这里的变量其实是一个数组
如果一个方法有多个参数,包含可变参数,可变参数要放在最后
可变参数的基本使用
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum(10, 20));
System.out.println(sum(10, 20, 30));
System.out.println(sum(10, 20, 30, 40));
System.out.println(sum(10,20,30,40,50));
System.out.println(sum(10,20,30,40,50,60));
System.out.println(sum(10,20,30,40,50,60,70));
System.out.println(sum(10,20,30,40,50,60,70,80,90,100));
}
// public static int sum(int b,int... a) {
// return 0;
// }
public static int sum(int... a) {
int sum = 0;
for(int i : a) {
sum += i;
}
return sum;
}
}