定义和使用含有泛型的接口和泛型通配符

定义和使用含有泛型的接口

第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型

//接口泛型
public interface demg_06<I>{
    public abstract void method(I i);
}
//实现接口<泛型>
class kk implements demg_06<String>{
    @Override
    public void method(String s) {
        System.out.println(s);
    }
}
//测试接口
class ss{
    public static void main(String[] args) {
        kk kk = new kk();
        kk.method("字符串");
  }
}

 

第二种方式:接口使用什么类型的泛型,实现接口的类就使用什么类型的泛型,类跟着接口走

public interface demg_06<I>{
    public abstract void method(I i);
}
class aa<I> implements demg_06<I>{
    @Override
    public void method(I i) {
        System.out.println(i);
    }
}
复制代码
//测试接口
class ss{
    public static void main(String[] args) {
        aa<Integer> objectaa = new aa<>();
        objectaa.method(10);
        aa<Double> objectaa1 = new aa<>();
        objectaa1.method(0.5);
    }
}
复制代码

 

泛型的通配符

当使用泛型或接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示,但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用

通配符基本使用:

泛型的通配符:不知道使用什么类型来接收,此时可以使用?,?表示未知通配符

此时只能接受数据,不能往该集合中存储数据,

举个例子大家理解使用即可:

  注意:泛型通配符只能用来参数传递,不能用在创建集合里的参数

复制代码
public class demg_07 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("牛x");
        list2.add("牛c");

        printArray(list);
        printArray(list2);
    }
    /*
        定义一个方法,能遍历所有类型的ArrayList集合
        这时候我们不知道ArrayList集合使用什么数据类型,可以泛型的通配符?来接收数据类型
        注意:
            泛型没有继承概念的
     */
    public static void printArray(ArrayList<?> list){
        //使用迭代器遍历集合
        Iterator<?> iterator = list.iterator();//获取Iterator接口
        while (iterator.hasNext()){//判断
            Object next = iterator.next();//判断集合中下一个是否有值
            System.out.println(next);
        }
    }
}
复制代码

 

通配符——受限泛型

之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置,但是在JAVA的泛型中可以指定一个泛型的上限和下限

泛型的上限:

  • 格式:类型名称 <? extends E>对象名称
  • 意义:只能接收该类型及其子类

泛型的下限:

  • 类型名称<? super E>对象名称
  • 意义:只能接收该类型及其父类型
复制代码
    public static void main(String[] args) {
        Collection<Integer> list1 = new ArrayList<>();
        Collection<String> list2 = new ArrayList<>();
        Collection<Number> list3 = new ArrayList<>();
        Collection<Object> list4 = new ArrayList<>();

        getMax(list1);
//        getMax(list2);//报错
        getMax(list3);
//        getMax(list4);//报错

//        getMin(list1);//报错
//        getMin(list2);//报错
        getMin(list3);
        getMin(list4);

    }
    //泛型的上限
    public static void getMax(Collection<? extends Number> coll){}
    //泛型的下限
    public static void getMin(Collection<? super Number> coll){}
复制代码

 

posted @   monkey大佬  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示