使用泛型的好处与定义和使用含有泛型的类
使用泛型的好处
创建集合对象,使用泛型好处:
1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)弊端:
泛型是什么类型,只能存储什么类型的数据
package Collection_Demo01; import java.util.ArrayList; import java.util.Iterator; public class Demo04_Demo01Generic { public static void main(String[] args) { show02(); } /* 创建集合对象,使用泛型好处: 1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型 2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)弊端: 泛型是什么类型,只能存储什么类型的数据 */ private static void show02() { ArrayList<String> list = new ArrayList<>(); list.add("abc"); //list,add (1 ); //add(java.Lang.string)in ArrayList cannot be applied to (int) //使用迭代器遍历list集合 Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ String s = iterator.next(); System.out.println(s+"->"+s.length()); } } /* 创建集合对象,不使用泛型 好处: 集合不使用泛型,默认的类型就是object类型,可以存储任意类型的数据 弊端: 不安全,会引发异常 */ private static void show01() { ArrayList list = new ArrayList<>(); list.add("abc"); list.add(1); //使用迭代器遍历List集合 // 获取迭代器 Iterator iterator = list.iterator(); //使用迭代器中的方法hasNext和next遍历集合while(it.hasNext(O)i while (iterator.hasNext()){ //取出元素也是object类型 Object next = iterator.next(); System.out.println(next); //想要使用string类特有的方法, Length获取字符串的长度;不能使用多态 object obj = "abc"; //需要向下转型 String s =(String)next; System.out.println(s.length()); } } }
泛型的定义与使用
我们在集合中会大量使用到泛型,这里来完整地学习泛型知识。
泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。
定义和使用含有泛型的类
定义格式:|
修饰符class类名<代表泛型的变量>{}
package Generic01_Demo01; /* 定义一个含有泛型的类,模拟Arraylist集合 泛型是一个未知的数据类型,当我们不确定什么什么数据类型的时候,可以使用泛型泛型可以接收任意的数据类型,可以使用Integer,string,student. . . 创建对象的时候确定泛型的数据类型 */ public class GenericClass<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } }
package Generic01_Demo01; public class Demo02GenericClass { public static void main(String[] args) { //不写泛型默认为Obectle类型 GenericClass genericClass = new GenericClass(); genericClass.setName("只能是字符串"); Object name = genericClass.getName(); //创建Genericclass对象,泛型使用Integer类型 GenericClass<Integer> genericClass1 = new GenericClass<>(); genericClass1.setName(1); Integer name1 = genericClass1.getName(); System.out.println(name1); //创建Genericclass对象,泛型使用string类型 GenericClass<String> genericClass2 = new GenericClass<>(); genericClass2.setName("小明"); String name2 = genericClass2.getName(); System.out.println(name2); } }