赞
踩
目录
泛型在java中有很重要的地位,并且编程中也是非常常见的,在面向对象编程及各种设计模式中有非常广泛的应用。
泛型就是变量类型的参数化。也就是说,所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别称为泛型类、泛型接口和泛型方法。
泛型在集合中的使用
//创建集合并指定泛型,约束集合只能存储String类型的数据
List<String> list = new ArrayList<String>();//集合只能添加字符串类型的数据
list.add("AA");
list.add("true");
list.add("100");
//....//获取集合中的元素,直接使用泛型类型接收数据即可,不需要强制类型转换
String str1 = list.get(0) ;
String str2 = list.get(1) ;
String str3 = list.get(2) ;System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
不使用泛型
//创建集合,但并没有指定泛型
List list = new ArrayList();//集合可以添加任意类型的数据
list.add("AA");
list.add(true);
list.add(100);
//....//获取集合中的元素,默认为Object类型,强制转换为相应的数据类型
String str1 = (String)list.get(0) ;
Boolean str2 = (Boolean)list.get(1) ;
Integer str3 = (Integer)list.get(2) ;System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
指定具体类型后,Java编译器会对错误的类型在编译时被捕获,而不是在运行时当作ClassCastException展示出来。从而提高程序的安全性和可靠性。
List<String> list = new ArrayList<String>() ;
list对象只能存放String对象,否则会编译出错
- //需要强制类型转换
- List list = new ArrayList() ;
- String str = (String)list.get(0) ;
-
- //不需要类型转换
- List<String> list = new ArrayList<String>() ;
- String str = list.get(0)
1)语法
[访问修饰符] class 类名<泛型1,泛型2,...> { 泛型1 泛型成员1 ; 泛型2 泛型成员2; ... }
例子
- //定义一个泛型
- public class People<A> {
- private String name;
- private String sex;
- private A pet;
- }
-
- //定义多个泛型
- public class People<A,B> {
- private String name;
- private String sex;
- private A pet;
- private B phone ;
- }
1)语法
[访问修饰符] interface 接口名<泛型1,泛型2,...> {
泛型1 泛型成员1 ;
泛型2 泛型成员2 ;
...
}
案例演示:
- /**
- * 第一:定义泛型接口
- */
- public interface GenericTest<T> {
- // 1. 常量
- public static final String name = "AAA";
-
- // 2.抽象方法
- public void sayHello(T sth);
- }
-
-
- /**
- * 第二:实现接口
- * 当实现泛型接口时,必须指定具体的数据类型
- */
- public class GenericTestIntegerImpl implements GenericTest<Integer> {
-
- @Override
- public void sayHello(Integer sth) {
- System.out.println("你好,"+sth);
- }
- }
-
- /**
- * 第二:实现接口
- * 当实现泛型接口时,必须指定具体的数据类型
- */
- public class GenericTestStringImpl implements GenericTest<String> {
-
- @Override
- public void sayHello(String sth) {
- System.out.println("你好,"+sth);
- }
- }
-
- /**
- * 测试
- * 第三:使用泛型接口
- */
- public class MainTest {
- public static void main(String[] args) {
- GenericTest<Integer> gt1 = new GenericTestIntegerImpl() ;
- gt1.sayHello(100) ;
-
- GenericTest<String> gt2 = new GenericTestStringImpl() ;
- gt2.sayHello("张三") ;
- }
- }
- /**
- * 第一:定义泛型类,使用泛型定义数组
- */
-
- public class GenericTest<T> {
- T[] arr;
-
- public T[] getArr() {
- return arr;
- }
-
- public void setArr(T[] arr) {
- this.arr = arr;
- }
- }
-
-
- /**
- * 第二:定义泛型类对象,调用方法,传递数组
- */
- public static void main(String[] args) {
- GenericTest<String> gt = new GenericTest<String>() ;
-
- String[] str = {"aa","bb","cc"} ;
-
- gt.setArr(str) ;
-
- String[] arrs = gt.getArr() ;
- for (String s : arrs) {
- System.out.println(s);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。