|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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;
- }
复制代码 |
|