博客
关于我
泛型Generic
阅读量:660 次
发布时间:2019-03-15

本文共 2742 字,大约阅读时间需要 9 分钟。

泛型

使用泛型:

好处:
避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型

先介绍不适用泛型存储数据

//不使用泛型:好处是简单,默认object,都可以储存,坏处:容易引起异常。如果想调用某个特定类型的方法,需要向下转型,比较麻烦!

代码:

public class Demo01Generic {public static void main(String[] args) {    show01();    //show02();}  /*private static void show02() {     ArrayList
list=new ArrayList<>(); // 只能存储字符串类型的数据!}*/private static void show01() { ArrayList list=new ArrayList(); list.add("tianshan"); list.add(true); list.add(12345); Iterator it = list.iterator(); while (it.hasNext()) { Object object = it.next(); System.out.println(object); //想要调用字符串类型的方法,使用向下转型; String s=(String)object; System.out.println(s.length());//Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String报错,不能转为string类型。 }}}

定义一个泛型元素类

代码:

其中E代表Element

public class GenericClass
{private E name;public E getName() { return name;}public void setName(E name) { this.name = name;}}//给这个对象类的属性使用泛型,getter/setter方法也是用泛型传递

测试类

代码:

public class GenericClassTest {public static void main(String[] args) {    GenericClass gc =new GenericClass();    gc.setName("只要是基本数据类型即可/或者对象数据类型也可以");    Object name = gc.getName();    System.out.println(name);//只要是基本数据类型即可/或者对象数据类型也可以    GenericClass
gcint=new GenericClass<>(); gcint.setName(1); Integer name1 = gcint.getName(); System.out.println(name1);//1,自动拆箱 GenericClass
gcstr=new GenericClass<>(); gcstr.setName("String类型"); System.out.println(gcstr.getName());//String类型}}

其中第一个是没有数据类型的数据直接导入,getname方法返回对应的是Object类型

第二个传递的是integer类型的数据,getname直接返回的是integer类型的数据,同样的string类型的也是这样!
看你传入什么类型的,获取的就是什么类型的!

定义一个泛型的接口,再分别使用非泛型的类和泛型的类实现它,最后看看两者的差别!

泛型接口

代码:

public interface GenericInterface {public void method(I i);//定义一个抽象方法;}

非泛型的类来实现(实现接口的时候已经将数据类型定义为了String类型,抽象方法的重写要保持一致性)

代码:

public class GenericInterfaceImpl implements GenericInterface
{@Overridepublic void method(String s) {//数据类型已经定义好了 System.out.println(s);}}

泛型的类来实现(实现的时候要保持元素的一致性,不可少了抽象类型的元素类型,如下面方法中的I实现的是接口中的I,实现的类可以添加元素,单数不可少了元素)

代码:

public class GenericInterfaceImpl2 implements GenericInterface{ @Overridepublic void method(I i) {    System.out.println(i);}}

//public class GenericInterfaceImpl2<String,I> implements GenericInterface也是可以的

测试类

代码:

public class GenericInterfaceTest {public static void main(String[] args) {    //方法一实现类定义了string类型了。    GenericInterfaceImpl gc1=new GenericInterfaceImpl();    gc1.method("周日补周五的课,美滋滋gepi~~~~~");    //gc1.method(1234);错误写法。定义好了数据类型    //方法二实现类跟着接口类是泛型,没有固定。    GenericInterfaceImpl2 gc2=new GenericInterfaceImpl2();    gc2.method(1234);    gc2.method("看来你是真的皮");}}

实现效果

周日补周五的课,美滋滋gepi~~~~~
1234
看来你是真的皮
实现原理参考开头的案例!

转载地址:http://mljmz.baihongyu.com/

你可能感兴趣的文章
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>