廖雪峰Java4反射与泛型-3范型-2使用范型

编写范型类比普通的类要麻烦,而且很少编写范型类。

1.编写一个范型类:

  • 按照某种类型(例如String)编写类
  • 标记所有的特定类型例如String
  • 把特定类型替换为T,并申明

    Pair
package com.testArray;

public class Pair<T> {
    private T fisrt;
    private T last;
    public Pair(T first,T last){
        this.fisrt=first;
        this.last=last;
    }
    public T getFisrt(){
        return fisrt;
    }
    public T getLast(){
        return last;
    }
}

Main.java

package com.testArray;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args){
        Pair<String> p = new Pair<String>("小明", "小红");
        String first = p.getFisrt();
        String last = p.getLast();
        System.out.println(first+"\t"+last);
        System.out.println(p.getClass() == Pair.class);
    }
}

2.范型类包含静态方法

注意:
范型类型 不能用于静态方法:

  • 编译错误
  • 编译器无法在静态字段或静态方法中使用范型类型

  • 静态方法可以单独改写为范型方法
    网上有种解决方法,在static后面加上 ,就解决了报错问题。但此处static方法中的 和上面Pair类中的 不一样,为了避免混淆,应该将 替换为
    public static <T> Pair<T> create(T first,T last){
        return new Pair<T>(first,last);
    }
package com.testArray;

public class Pair<T> {
    private T fisrt;
    private T last;
    public Pair(T first,T last){
        this.fisrt=first;
        this.last=last;
    }
    public T getFisrt(){
        return fisrt;
    }
    public T getLast(){
        return last;
    }
    static <K> Pair<K> create(K first,K last){
        return new Pair<K>(first,last);
    }
}
package com.testArray;

public class Main {
    public static void main(String[] args){
        Pair<String> p = Pair.create("小明", "小红");
        String first = p.getFisrt();
        String last = p.getLast();
        System.out.println(first+"\t"+last);
        System.out.println(p.getClass() == Pair.class);
    }
}

3.范型可以定义多种类型

Pair.java

package com.testArray;

public class Pair<T,K> {
    private T fisrt;
    private K last;
    public Pair(T first,K last){
        this.fisrt=first;
        this.last=last;
    }
    public T getFisrt(){
        return fisrt;
    }
    public K getLast(){
        return last;
    }
}

Main.java

package com.testArray;

public class Main {
    public static void main(String[] args){
        Pair<String,Integer> p = new Pair<String,Integer>("小明", 12);
        String first = p.getFisrt();
        Integer last = p.getLast();
        System.out.println(first+"\t"+last);
        System.out.println(p.getClass() == Pair.class);
    }
}

4.总结:

  • 编写范型时,需要定义范型类型
    * public class Pair {...}
  • 静态方法不能引用范型类型 ,必须定义其他类型 来实现范型
    * public static Pair create(K first, K last){...}
    范型可以同时定义多种类型<T,K>
    public class Pair<T,K>{...}

猜你喜欢

转载自www.cnblogs.com/csj2018/p/10426376.html