定义和使用含有泛型的接口和泛型通配符
定义和使用含有泛型的接口
第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型
//接口泛型 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){}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix