Java泛型

基本使用:

1、用泛型表示类

public class Template {
    public static void main(String[] args) {
        Tem<String> t1=new Tem<>();
        t1.setValue("hello");
        System.out.println(t1.getValue());
    }
}
class Tem<T>{
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

2、用泛型表示方法

public class Template {
    public static void main(String[] args) {
        Tem t1=new Tem();
        t1.function("hello");
    }
}
class Tem{
    public <T> void function(T value){
        System.out.println(value.getClass().getName());
    }
}

3、泛型通配符

package JavaCore;

import java.lang.reflect.Array;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Template {
    public static void main(String[] args) {
        List<Animal>   animals   =new ArrayList<>();
        List<Cat>      cats      =new ArrayList<>();
        List<WhiteCat> whiteCats =new ArrayList<>();
        Animal   animal   = new Animal();
        Cat      cat      = new Cat();
        WhiteCat whiteCat = new WhiteCat();
        animals.add(animal);
        cats.add(cat);
        whiteCats.add(whiteCat);
        //测试f1可以匹配任何类型
        System.out.println(f1(animals).get(0).getClass().getName());
        System.out.println(f1(cats).get(0).getClass().getName());
        System.out.println(f1(whiteCats).get(0).getClass().getName());
        //输出结果:
        //JavaCore.Animal
        //JavaCore.Cat
        //JavaCore.WhiteCat

        //测试f2
        //System.out.println(f2(animals).get(0).getClass().getName());  //报错
        System.out.println(f2(cats).get(0).getClass().getName());       //它自己
        System.out.println(f2(whiteCats).get(0).getClass().getName());  //它的子类
        //输出结果:
        //JavaCore.Cat
        //JavaCore.WhiteCat

        //测试f3
        System.out.println(f3(animals).get(0).getClass().getName());    //它的父类
        System.out.println(f3(cats).get(0).getClass().getName());       //它自己
        //System.out.println(f3(whiteCats).get(0).getClass().getName());  //报错
        //输出结果:
        //JavaCore.Animal
        //JavaCore.Cat

    }
    //匹配任意类型
    public static List<?> f1(List<?>list){
        return list;
    }
    //上界通配符 <? extends ClassType> 匹配ClassType的所有子类包括它本身
    public static List<? extends Cat> f2(List<? extends Cat>list){
        return list;
    }
    //下界通配符 <? super ClassType> 匹配ClassType的所有父类包括它本身
    public static List<? super Cat> f3(List<? super Cat>list){
        return list;
    }
}
class Animal{

}
class Cat extends Animal{

}
class WhiteCat extends Cat{

}

Java泛型常见面试题:https://blog.csdn.net/guoqingshuang/article/details/88289952?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.control&spm=1001.2101.3001.4242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值