读书笔记--泛型编程--《写给大忙人的JavaSE 9 核心技术》—第6章

读书笔记–《写给大忙人的JavaSE 9 核心技术》—第6章

泛型编程

Java是强类型的语言,对于函数中的参数需要声明其类型,当需要实现适用于多中类型的方法和类时,此时需要用到泛型。

泛型类

public class Test1<K,V> {
    public test1(K key,V value) {
        System.out.println(key);
        System.out.println(value);
    }
}

// 正确
Test1 t = new Test1("key",6);
// 正确,此时Test1<String,Integer>这里指定的泛型类型,无效。
Test1<String,Integer> t2 = new Test1("key","6");
// 错误,参数类型要和前面指定的一样,不然编译器无法推断类型
Test1<String,Integer> t2 = new Test1<>("key","6");

注意:
泛型里面参数不能用基本数据类型,要用他们的包装类!就是说尖括号里面不能放基本类型。

错误

正确

泛型方法

public <T> void say(T t) {
    System.out.println(t.toString());
}
public <T> T[] say2(T[] t,int i,int j) {
    T temp = t[i];
    t[i] = t[j];
    t[j] = temp;
    return t;
}

泛型的通配符

public  void say3(LinkedList<?> temp){
    System.out.println(temp.size());
    // 错误,采用了通配符后,这个里面是只读的。
    temp.set(0,"777");
}

通配符上下界

? extends Test1 表示一个未知的Test1的子类

? super Test1 表示一个未知的Test1的父类

//上转型是安全的,下转型是不安全的
//能取,不能存,
public void method(List<? extends Test1> holder, Test1 arg){
    holder.add(arg); //error
    Test1 t = holder.get(0);
}
// 能存,不能取,
public void method(List<? super Test1> holder, Test1 arg){
    holder.add(arg);
    Test1 t = holder.get(0); //error
}
发布了15 篇原创文章 · 获赞 8 · 访问量 5959

猜你喜欢

转载自blog.csdn.net/crxk_/article/details/103056629