java泛型



一、什么是泛型

定义类、接口、方法的时候想要传递任意类型,按照以往的情况可以把类型设置成Object,但这样可能会出现类型装换异常,为了解决这个问题所以出现了泛型,就是在定义时定义类型变量,作为参数传递。
注意:类型变量建议使用大写字母一般使用E、T、K、V

二、定义泛型

定义泛型类

  • 定义
// 修饰符+class+类名<类型变量>
public class MyArrayList<T> {

    private final ArrayList<T> list = new ArrayList<>();

    public boolean add(T t){
        return list.add(t);
    }

    public boolean remove(T t){
        return list.remove(t);
    }

    @Override
    public String toString() {
        return list.toString();
    }
}
  • 使用
public class GenericsDome01 {

    public static void main(String[] args) {
    	// 在使用过程中把String作为参数传递给MyArrayList,里面的T代表String
        MyArrayList<String> list = new MyArrayList<>();

        list.add("岳不群");
        list.add("令狐冲");
        list.add("林平之");

        list.remove("令狐冲");



        System.out.println(list);
    }
}

定义泛型接口

// 修饰符+class+类名<类型变量>
public interface TestGenericsClass<T> {
}

定义泛型方法

public static <T> T sum(T[] arr) {
   return null;
}

三、其他

通配符和上下限

使用‘?’代替,可以代替一切类型

public class GenericDemo2 {
    public static void main(String[] args) {
        // 需求:要求所有的汽车可以一起参与比赛。
        ArrayList<BJD> bjds = new ArrayList<>();
        bjds.add(new BJD());
        bjds.add(new BJD());
        bjds.add(new BJD());
        go(bjds);

        ArrayList<MZD> mzds = new ArrayList<>();
        mzds.add(new MZD());
        mzds.add(new MZD());
        mzds.add(new MZD());
        go(mzds);

        // 虽然BJD和MZD是Car的子类,但是  ArrayList<BJD>  ArrayList<MZD> 和 ArrayList<Car>没有半毛钱关系。
        // Java提供了一个语法:泛型通配符:其实就是“?”,可以在使用泛型的时候代表一切类型。
        // Java提供了泛型上下限,约束?的具体类型。
        //    ? extends Car : 上限: ? 必须是Car的子类,顶多是Car
        //    ? super Car : 下限: ? 必须是Car的父类,至少是Car
        //        ArrayList<Dog> dogs = new ArrayList<>();
		//        dogs.add(new Dog());
		//        dogs.add(new Dog());
		//        dogs.add(new Dog());
		//        go(dogs);
    }

    public static void go(ArrayList<? extends Car> cars){
    }
}

class Car{}
class BJD extends Car{}
class MZD extends Car{}
class Dog{}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值