Java-023泛型、静态导入、可变参数
本帖最后由 moc 于 2019-1-6 12:39 编辑1、泛型
Java 泛型(generics): JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质:参数化类型,也就是说所操作的数据类型被指定为一个参数。
与C++泛型用法基本一致,也存在泛型类和泛型方法,不同的是Java的泛型类型参数只能用来表示引用类型,不能用来表示基本类型,如int、double、char 等。但是传递基本类型不会报错,因为它们会自动装箱成对应的包装类。
1. 泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。类型参数声明部分可包含一个或多个类型参数,参数间用逗号隔开。
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}2. 泛型方法
① 泛型方法包含有泛型类型参数,也可以有普通参数;
② 类型参数需要放在修饰符后面、返回值类型前面。
③ 一旦定义了类型参数,就可以在参数列表、方法体和返回值类型中使用。
④ 与使用泛型类不同,使用泛型方法时不必指明参数类型,编译器会根据传递的参数自动查找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。
⑤ 泛型方法与泛型类没有必然的联系,泛型方法有自己的类型参数,在普通类中也可以定义泛型方法。
class Point<T1, T2>{
T1 x;
T2 y;
// 定义泛型方法
public <T1, T2> void printPoint(T1 x, T2 y){
T1 m = x;
T2 n = y;
System.out.println("This point is:" + m + ", " + n);
}
}3. 泛型接口
在Java中也可以定义泛型接口,与泛型类类似。
interface Info<T> {
public T getVar();
}4. 类型擦除
如果在使用泛型时没有指明数据类型,那么就会擦除泛型类型, 即编译器会将所有数据向上转型为 Object,所以在取出使用时要向下转型成原始的类型。
5. 类型通配符
类型通配符用于限制泛型的可用类型,有三种:
? ------> 无界通配符,代表未知类型,等同于 < ? extends Object>
? extends E ------> 代表E及其子类
? super E ------> 代表E及其父类
2、静态导入
功能: 直接导入Java类中的静态方法。
格式:
import static 包名....类名.方法名;
注意:
① 方法必须是静态的;
② 如果多个类下有同名的方法,不好区分了,需加上类前缀(如:java.lang.Math.abs(-100))。
3、可变参数
功能: 定义方法的时候, 参数个数不明确时使用。
格式:
修饰符 返回值类型 方法名(数据类型…变量名){}
注意:
① 可变参数变量其实存在一个数组中;
② 如果一个方法有可变参数,并且有多个参数,可变参数肯定是最后一个。
public static int sum(int... a) {
int s = 0;
for(int x : a){
s +=x;
}
return s;
} {:7_145:}
页:
[1]