网站静态化 好处产品包装设计网
2026/4/4 13:05:03 网站建设 项目流程
网站静态化 好处,产品包装设计网,it外包范围,我的wordpress主题定义类、接口、方法时#xff0c;同时声明了一个或多个类型变量#xff08;如#xff1a;E#xff09;#xff0c;称为泛型类、泛型接口、泛型方法#xff0c;他们统称为泛型。public class ArrayListE {//... }作用#xff1a;泛型提供了在编译阶段约束…定义类、接口、方法时同时声明了一个或多个类型变量如E称为泛型类、泛型接口、泛型方法他们统称为泛型。public class ArrayListE{ //... }作用泛型提供了在编译阶段约束所能操作的数据类型并自动进行检查的能力这样可以避免强制类型转换及其可能出现的异常。泛型的本质把具体的数据类型作为参数传递给类型变量。为什么要使用泛型先来看我们不使用泛型时往集合中添加元素有什么问题import java.util.ArrayList; import java.util.Iterator; public class Test { public static void main(String[] args) { //1.创建集合的对象 ArrayList list new ArrayList(); //2.添加数据 list.add(123); list.add(aaa); list.add(new Student(zhangsan, 21)); //3.遍历集合获取里面的每一个元素 Iterator it list.iterator(); while (it.hasNext()) { Object obj it.next(); System.out.println(obj); } } }输出结果当你往ArrayList集合中添加数据时调用add()方法会显示添加的数据是Object类型也就是什么类型都可以添加比如int类型、String类型甚至是自己定义的Student类型使用iterator()迭代器遍历集合中的元素用next()方法拿到的元素也是Object类型的我们可以将其打印输出没有问题。但是多态的弊端是不能访问子类特有的功能比如我想打印输出第二个元素aaa的长度这是一个String类型的数据直接使用obj.length()来输出长度但其实这样写是会报错的编译就不通过那如果强制转换呢你会发现编译通过了语法没有问题但是运行会报错。报了一个类型转换异常为什么会报这个异常呢如果你是int类型转成String类型那没问题但是遍历的是数组中的整个元素自定义的Student类型怎么转成String类型呢所以会报一个类型转换异常。通过以上现象我们发现当往集合中添加任意类型元素时不能访问子类特有的功能如果使用强制类型转换则可能会出现类型转换异常所以使用泛型来解决这个问题。import java.util.ArrayList; import java.util.Iterator; public class Test { public static void main(String[] args) { //1.创建集合的对象 ArrayListString list new ArrayList(); //2.添加数据 // list.add(123); list.add(aaa); list.add(bbb); list.add(ccc); // list.add(new Student(zhangsan, 21)); //3.遍历集合获取里面的每一个元素 IteratorString it list.iterator(); while (it.hasNext()) { String str it.next(); System.out.println(str); } } }使用泛型String来规定ArrayList数组中的数据类型只能是String类型这样就保证了数组中数据类型的统一把运行时期的问题提前到了编译时期避免了强制类型转换可能出现的异常。泛型的分类前面提到在定义类、接口、方法时同时声明了一个或多个类型变量如E称为泛型类、泛型接口、泛型方法泛型也就分为这三类每类都各自有各自的格式。泛型类格式修饰符 class 类名类型变量类型变量... {}public class ArrayListE{ ... }类型变量建议用大写的英文字母常用的有E、T、K、V等自定义泛型类自定义泛型类——声明单个public class MyArrayListE { private Object[] arr new Object[10]; private int size;//记录当前位置的 public boolean add(E e){ arr[size] e; return true; } public E get(int index){ return (E) arr[index]; } }自定义泛型类——声明多个public class MyClass1E, T { public void put(E e, T t){ } }自定义泛型类——必须要继承某个类public class MyClass2E extends Animal { }泛型接口格式修饰符 interface 接口名类型变量, 类型变量, ...{}public interface AE { ... }举例public interface DataT { void add(T t); ArrayListT getByName(String name); }泛型方法格式修饰符 类型变量, 类型变量, ... 返回值类型 方法名(形参列表) {}public static T void test(T t) { }注意这个下面这个不是泛型方法public E get(int index) { return (E) arr[index]; }补充知识拓展知识当你在java文件中使用了泛型来限制数据类型但当这个java文件编译成class文件后就没有你写的泛型了统一当成Object类型处理只是当你往外取数据时底层会帮你再次强转成你所定义的泛型。泛型的细节泛型是工作在编译阶段的一旦程序编译成class文件class文件中就不存在泛型了这叫做泛型擦除。泛型不支持基本数据类型只能支持对象类型引用数据类型。指定泛型的具体数据类型后传递数据时可以传入该类类型或者其子类类型如果不写泛型默认是Object类型通配符就是“?”可以在“使用泛型”的时候代表一切类型E T K V是在定义泛型的时候使用。泛型的上下限泛型上限? extends A?能接收的必须是A或者是A的子类泛型下线? super A?能接收的必须是A或者是A的父类

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询