Java泛型的定义与运用
泛型
泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确定的类型,代码更灵活。
不使用泛型,少了限制,则在集合添加数据就不会类型异常的错误,导致运行结果出错。
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add(666);
list.add(true);
for (Object o : list) {
String s = (String) o;
System.out.println(s.length());
}
}
}
- 泛型中的类型必须是引用类型
- 如果泛型不写,默认类型为Object
泛型的定义
含有泛型的类
new对象的时候确定类型,格式:
public class 类名{ }
public class MyArrayList {
Object[] obj = new Object[5];//定义一个数组,充当ArrayList底层的数组,长度直接规定为10
int size;
public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致
obj[size] = e;
size++;
return true;
}
@Override
public String toString() {
return Arrays.toString(obj);
}
}
public class Test {
public static void main(String[] args) {
Student list1 = new Student();
list1.add("张三");
list1.add("李四");
System.out.println(list1);//直接输出对象名,默认调用toString
Student list2 = new Student();
list2.add(1);
list2.add(2);
System.out.println(list2);
}
}
含有泛型的方法
调用的时候确定类型,其格式:
修饰符 返回值类型 方法名(E e)
public class Student {
public static void addAll(ArrayList list, E...e){ //定义一个静态方法addAll,添加多个集合的元素,传入可变参数
for (E element : e) {
list.add(element);
}
}
}
public class Test {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
Student.addAll(list1, "张三", "李四");
System.out.println(list1);
ArrayList list2 = new ArrayList();
Student.addAll(list2, 1, 2);
System.out.println(list2);
}
}
含有泛型的接口
格式:
public interface 接口名{ }
什么时候确定类型分两种,一种是在实现类的时候还没有确定类型,只能在new实现类的时候确定类型了,例如ArrayList。一种是在实现类的时候直接确定类型了比如Scanner。
public interface MyList {
public boolean add(E e);
}
public class MyArrayList implements MyList{
Object[] obj = new Object[5];
int size;
public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致
obj[size] = e;
size++;
return true;
}
@Override
public String toString() {
return Arrays.toString(obj);
}
}
public class Test {
public static void main(String[] args) {
MyArrayList list = new MyArrayList();
list.add("张三");
list.add("李四");
System.out.println(list);
}
}
泛型通配符
泛型通配符使得我们能够更加灵活地处理泛型类型,使代码更通用且可复用。包括以下几类
E:Element (在集合中使用,因为集合中存放的是元素)
T:Type(Java 类)
K:Key(键)
V:Value(值)
N:Number(数值类型)
?:表示不确定的 java 类型
public class Test {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("张三");
list1.add("李四");
ArrayList list2 = new ArrayList();
list2.add(1);
list2.add(2);
test(list1);
test(list2);
}
public static void test(ArrayList list){ //?表示不确定的 java 类型
for (Object o : list) {
System.out.println(o);
}
}
}
泛型的上限下限
泛型的上下限可以规定泛型的范围
上限:?只能接收extends后面的本类类型以及子类类型
格式:
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




