moc 发表于 2018-12-27 09:47:22

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;
}

zwhe 发表于 2020-6-5 11:03:03

{:7_145:}
页: [1]
查看完整版本: Java-023泛型、静态导入、可变参数