java泛型

泛型

测试用例1

import org.junit.Test;

public class T {

    @Test
    public void m() {
        Product<String,Integer> product = new Product<>();
        product.param(2024);

        product.name = "巧克力";
        System.out.println("获取属性:"+product.getName());
    }
    /*
    执行结果:
        获取传参:2024
        获取属性:巧克力
    */
}

/*T:Type类型。E:Element元素?参数*/
class Product<T,E> {

    T name;//泛型变量

    /*参数泛型*/
    public void param(E e) {
        System.out.println("获取传参:"+e);
    }

    /*泛型方法*/
    public T getName() {
        return name;
    }
}

测试用例2 静态泛型方法

package fanxing;

import org.junit.Test;

public class T {

    @Test
    public void m() {
        Product<String> product = Product.hello("静态泛型方法");
        System.out.println(product);
        System.out.println(product.data);
    }
}

class Product<T> {
    public T data;

    /*静态泛型方法
    第一个<T>为方法的泛型,
    第二个<T>是返回值的泛型,
    第三个<T>为操作数据的泛型。
    * */
    public static <T> Product<T> hello(T param){
        Product<T> product = new Product<>();
        product.data = param;
        return product;
    }

    @Override
    public String toString() {
        return "Product{" +
            "data=" + data +
            '}';
    }
}
/*
Product{data=静态泛型方法}
静态泛型方法
**/

测试用例3 上界限定符 vs 下界限定符

import org.junit.Test;

import java.util.*;

public class T {
    // ? super E: 下界限定符,E及其父类
    @Test
    public void m3() {
        // !!!编译报错 List<? super Cat> ?任意类型限定为Cat及其父类
        // List<? super Cat> cats4 = new ArrayList<Tiger>();

        List<? super Cat> cats1 = new ArrayList<Object>();
        List<? super Cat> cats2 = new ArrayList<Animal>();
        List<? super Cat> cats3 = new ArrayList<Cat>();
    }

    // ? extends E: 上界限定符,E及其子类
    @Test
    public void m2() {
        // !!!编译报错,<? extends Animal> ?任意类型限定为Animal及其子类
        // List<? extends Animal> animals4 = new ArrayList<Object>();

        List<? extends Animal> animals1 = new ArrayList<Animal>();
        List<? extends Animal> animals2 = new ArrayList<Cat>();
        List<? extends Animal> animals3 = new ArrayList<Dog>();
        List<? extends Animal> animals4 = new ArrayList<Tiger>();

    }

    /*<?>表示任意的类型都是可以的*/
    @Test
    public void m1_2() {
        List<?> annimals1 = new ArrayList<Animal>();
        List<?> annimals2 = new ArrayList<Dog>();
        List<?> annimals3 = new ArrayList<Cat>();
    }

    /*编译报错 泛型指定具体类型
        泛型如果明确写的时候,前后必须一致。
    */
    @Test
    public void m1_1() {
        // List<Animal> animals = new ArrayList<Cat>();
    }


    class Animal {
    }

    class Cat extends Animal {
    }

    class Tiger extends Cat {

    }

    class Dog extends Animal {
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值