当前位置:   article > 正文

java泛型详解_java 泛型类

java 泛型类

目录

一、概念

二、好处

1、类型安全

2、消除强制类型转换

三、分类

1、泛型类

2、泛型接口

3、泛型数组


一、概念

泛型在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);

 

二、好处

1、类型安全

指定具体类型后,Java编译器会对错误的类型在编译时被捕获,而不是在运行时当作ClassCastException展示出来。从而提高程序的安全性和可靠性。

List<String> list = new ArrayList<String>() ;

list对象只能存放String对象,否则会编译出错

2、消除强制类型转换

  1. //需要强制类型转换
  2. List list = new ArrayList() ;
  3. String str = (String)list.get(0) ;
  4. //不需要类型转换
  5. List<String> list = new ArrayList<String>() ;
  6. String str = list.get(0)

 

三、分类

1、泛型类

1)语法

[访问修饰符] class 类名<泛型1,泛型2,...> {
    泛型1 泛型成员1 ;
    泛型2 泛型成员2;
    ...
}

例子

  1. //定义一个泛型
  2. public class People<A> {
  3. private String name;
  4. private String sex;
  5. private A pet;
  6. }
  7. //定义多个泛型
  8. public class People<A,B> {
  9. private String name;
  10. private String sex;
  11. private A pet;
  12. private B phone ;
  13. }

2、泛型接口

1)语法

[访问修饰符] interface 接口名<泛型1,泛型2,...> {
  泛型1 泛型成员1 ;
  泛型2 泛型成员2 ;
  ...

案例演示:

  1. /**
  2. * 第一:定义泛型接口
  3. */
  4. public interface GenericTest<T> {
  5. // 1. 常量
  6. public static final String name = "AAA";
  7. // 2.抽象方法
  8. public void sayHello(T sth);
  9. }
  10. /**
  11. * 第二:实现接口
  12. * 当实现泛型接口时,必须指定具体的数据类型
  13. */
  14. public class GenericTestIntegerImpl implements GenericTest<Integer> {
  15. @Override
  16. public void sayHello(Integer sth) {
  17. System.out.println("你好,"+sth);
  18. }
  19. }
  20. /**
  21. * 第二:实现接口
  22. * 当实现泛型接口时,必须指定具体的数据类型
  23. */
  24. public class GenericTestStringImpl implements GenericTest<String> {
  25. @Override
  26. public void sayHello(String sth) {
  27. System.out.println("你好,"+sth);
  28. }
  29. }
  30. /**
  31. * 测试
  32. * 第三:使用泛型接口
  33. */
  34. public class MainTest {
  35. public static void main(String[] args) {
  36. GenericTest<Integer> gt1 = new GenericTestIntegerImpl() ;
  37. gt1.sayHello(100) ;
  38. GenericTest<String> gt2 = new GenericTestStringImpl() ;
  39. gt2.sayHello("张三") ;
  40. }
  41. }

3、泛型数组

  1. /**
  2. * 第一:定义泛型类,使用泛型定义数组
  3. */
  4. public class GenericTest<T> {
  5. T[] arr;
  6. public T[] getArr() {
  7. return arr;
  8. }
  9. public void setArr(T[] arr) {
  10. this.arr = arr;
  11. }
  12. }
  13. /**
  14. * 第二:定义泛型类对象,调用方法,传递数组
  15. */
  16. public static void main(String[] args) {
  17. GenericTest<String> gt = new GenericTest<String>() ;
  18. String[] str = {"aa","bb","cc"} ;
  19. gt.setArr(str) ;
  20. String[] arrs = gt.getArr() ;
  21. for (String s : arrs) {
  22. System.out.println(s);
  23. }
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/381778
推荐阅读
相关标签
  

闽ICP备14008679号