第二课:泛型类、接口

文章目录

    • 一、泛型类的定义
    • 二、泛型类的使用语法

一、泛型类的定义

  • 泛型类的定义语法
class 类名称 <泛型标识、泛型标识,...> {
    private 泛型标识 变量名;
    ......
}
  • 常用的泛型标识 T、E、K、V

如下是案例

/**
 * 泛型类的定义
 * @param  泛型标识-----类型形参
 *           T 创建对象的时候里面具体制定的数据类型
 */
public class Generic<T> {

    // T 是由外部使用类的时候来指定的。
    private T key;

    public Generic(T key) {
        this.key = key;
    }

    public T getKey() {
        return key;
    }

    public void setKey(T key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Generic{" +
                "key=" + key +
                '}';
    }
}

二、泛型类的使用语法

  • 使用语法
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
  • java 1.7以后,后边的<>中具体的数据类型可以省略不写
类名<具体的数据类型> 对象名 = new 类名<>();

如下是案例:

public static void main(String[] args) {
    // 泛型类在创建对象的时候来指定操作的具体数据类型
    Generic<String> stringGeneric = new Generic<>("a");
    String key = stringGeneric.getKey();
    System.out.println("key:" + key);

    System.out.println("------------------------");
    Generic<Integer> integerGeneric = new Generic<>(100);
    Integer key1 = integerGeneric.getKey();
    System.out.println("key1:"+key1);
    // 总结:泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数。

    System.out.println("----------注意点1:--------------");
    // 泛型类在创建对象的时候,没有指定泛型类,将按照Object类型来操作
    Generic generic = new Generic("ABC");
    Object key3 = generic.getKey();
    System.out.println("key3:"+key3);
    
    System.out.println("----------注意点2:--------------");
    // 泛型类不支持基本数据类型,原因就是我们在编译期间会将这个 T 编译成 Object
    // 基本数据类型无法转化为 object类型
    // Generic intGeneric = new Generic<>(100);

    System.out.println("----------注意点3:--------------");
    // 同一泛型类,根据不同的数据类型创建的对象,本质上是同一类型
    System.out.println(integerGeneric.getClass() == stringGeneric.getClass());
}

总结:泛型类注意事项

  • 泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
  • 泛型的类型参数只能是类类型,不能是基本数据类型
  • 泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型

你可能感兴趣的:(泛型,java)