Java 自定义泛型

1、接口的泛型

  • 例如List<数据类型>,在创建接口的时候可以通过传不同的类型,进行使用。

如果需要对一些类型进行一些相同的类似于增删改查的操作,那么可以用泛型来简化,只需要将需要操作的类型传入即可。

  • 需要注意的是泛型大多用一个字符来表示,也相当于是约定俗成的,太多的话会让人感觉是一个类,即使代码没问题,也会让看的人产生错觉。

public interface Dao<T> {
    public void add(T t);
    public void remove(T t);
    public void update(T t);
    public void fiid(T t);
}

2、类的泛型

  • 根接口中一样

public class DaoImpal<T> implements Dao<T>{
    @Override
    public void add(T t) {
        System.out.println("增加了一个" + t);
    }
​
    @Override
    public void remove(T t) {
        System.out.println("删除了一个"+ t);
    }
​
    @Override
    public void update(T t) {
        System.out.println("修改了一个" + t);
    }
    @Override
    public void fiid(T t) {
        System.out.println("找到了一个" + t);
    }
}

3、方法的泛型

  • 相当于是设置了一个泛型变量,变量通过传入的数据类型进行修改。

  • 用的不多

public class Method {
    //            变量 返回值          传入的参数类型来决定T泛型到底是什么
    public static <T> List<T> getList(T[] ts){ 
        List<T> list = new ArrayList<T>();
        for(T t : ts){
            list.add(t);
        }
        return list;
    }
    public static void main(String[] args) {
        String[] s = {"a", "b", "c", "d", "e", "f"};
        List<String> list = Method.getList(s);
        System.out.println(list);
    }
}

4、通配符

可以用 ? 来匹配所有类型的数据。

  • 注意:? 的范围太大,有时候可能会产生一些多余的问题,所以也可以在 ?的基础上加一些限制,通过extends 和 super来限制

  • 不常用,但是要能读懂代码。

/***
     *  传过来的参数必须是动物List
     *  ? extends 类 泛型必须是XXX的子类或者本身
     */
    public void wei(List<? extends Animal> anilist){
        for(Object a : anilist){
            Animal ani = (Animal)a;
            ani.eat();
        }
    }
    /***
     *  传过来的参数必须是动物List
     *  ? super 类 泛型必须是XXX的父类或者本身
     */
    public void wei2(List<? super BoSiCat> anilist){
        for(Object a : anilist){
            Animal ani = (Animal)a;
            ani.eat();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值