千锋教育-做有情怀、有良心、有品质的IT职业教育机构

位置:首页 > 千锋动态

千锋西安Java基础培训分享泛型知识

时间:2018-03-06 14:05:15  |  来源:西安千锋  |  作者:千锋教育西安校区

   千锋西安Java老师认为,真正有效率的,是线下脱产学习,但如果确实不方便线下学习,千锋老师也准备了Java基础培训线上视频资料,这次我们选取其中关于Java泛型的一些知识,希望能够对大家有所帮助。

CJSEF`7I$BXKT{MJ@ANBYIL.png

  泛型

  Java的泛型是编译器提供的语法糖,官方称之为:类型参数搽除,先看一下语法,然后总结一点规律:

  泛型方法

  测试代码

  1 static void puts(T msg) {

  2 println(msg);

  3 }

  4

  5 static void println(Object msg) {

  6 System.out.println("Object:" + msg);

  7 }

  8

  9 static void println(String msg) {

  10 System.out.println("String:" + msg);

  11 }

  调用泛型方法

  1 System.out.println("generic method test");

  2 puts("hello");

  3 Program. puts("hello");

  输出的结果是

  1 generic method test

  2 Object:hello

  3 Object:hello

  泛型类

  测试代码

  1 class TestGenericClass {

  2 T value;

  3

  4 void setValue(T value) {

  5 this.value = value;

  6 }

  7 }

  调用代码

  1 System.out.println("generic class test");

  2 System.out.println(t.value);

  输出结果

  1 generic class test

  2 1

  泛型接口

  测试代码

  1 interface TestInterface {

  2 void test(T item);

  3 }

  4

  5 class TestInterfaceImp1 implements TestInterface {

  6

  7 @Override

  8 public void test(String item) {

  9 System.out.println(item);

  10 }

  11 }

  12

  13 class TestInterfaceImp2 implements TestInterface {

  14

  15 @Override

  16 public void test(T item) {

  17 System.out.println(item);

  18 }

  19 }

  调用代码

  1 System.out.println("generic interface test");

  2 TestInterface testInterface1 = new TestInterfaceImp1();

  3 testInterface1.test("hi");

  4 for (Method item : testInterface1.getClass().getMethods()) {

  5 if (item.getName() == "test") {

  6 System.out.println(item.getParameterTypes()[0].getName());

  7 }

  8 }

  9

  10 TestInterface testInterface2 = new TestInterfaceImp2<>();

  11 testInterface2.test("hi");

  12 for (Method item : testInterface2.getClass().getMethods()) {

  13 if (item.getName() == "test") {

  14 System.out.println(item.getParameterTypes()[0].getName());

  15 }

  16 }

  输出结果

  1 generic interface test

  2 hi

  3 java.lang.String

  4 java.lang.Object

  5 hi

  6 java.lang.Object

  类型参数约束

  测试代码

  1 class Animal {

  2 }

  3

  4 class Dog extends Animal {

  5 }

  6

  7 class Base {

  8 public void test(T item) {

  9 System.out.println("Base:" + item);

  10 }

  11 }

  12

  13 class Child extends Base {

  14

  15 @Override

  16 public void test(Dog item) {

  17 System.out.println("Child:" + item);

  18 }

  19 }

  调用代码

  1 System.out.println("bounded type parameters test");

  2 Base base = new Child();

  3 base.test(new Dog());

  4 for (Method item : base.getClass().getMethods()) {

  5 if (item.getName() == "test") {

  6 System.out.println(item.getParameterTypes()[0].getName());

  7 }

  8 }

  输出结果

  1 bounded type parameters test

  2 Child:Dog@533c2ac3

  3 Dog

  4 Animal

  类型搽除过程

  将泛型定义中的类型参数去掉。

  class Base {

  public void test(T item) {

  System.out.println("Base:" + item);

  }

  }

  将T换成extends指定的约束类型,默认是Object。

  1 class Base {

  2 public void test(Animal item) {

  3 System.out.println("Base:" + item);

  4 }

  5 }

  如果有非泛型类型继承或实现了泛型基类或接口,而且进行了重写,根据情况,编译器会自动生成一些方法。

  1 class Child extends Base {

  2 @Override

  3 public void test(Animal item) {

  4 this.test((Dog)item);

  5 }

  6

  7 public void test(Dog item) {

  8 System.out.println("Child:" + item);

  9 }

  10 }

  根据泛型参数的实际参数搽除调用代码。

  1 System.out.println("bounded type parameters test");

  2 Base base = new Child();

  3 base.test(new Dog());

  4 for (Method item : base.getClass().getMethods()) {

  5 if (item.getName() == "test") {

  6 System.out.println(item.getParameterTypes()[0].getName());

  7 }

  8 }

  以上就是千锋西安Java基础培训班的老师关于Java中泛型相关知识的学科了,如果你想学习全部Java知识,欢迎进入千锋网站了解。

上一篇:千锋西安Java老师解析JavaEE中的13种核心技术
下一篇:Python入门视频教程2018版,快速学习就来千锋

新开班信息

企业之声 more >
  • 人事专员 刘娇
    【博彦科技】人事专员 刘娇

    入职一年多崔志波工作非常好,感谢千锋培养的人才。

  • 技术主管李先生
    【华夏基金】技术主管李先生

    周红梅,有较强的学习能力,是有发展潜力的年轻人。

  • 总经理宋总
    【北京未来付网络技术公司】总经理宋总

    郑秋浩思想灵活,能按时保质保量完成工作内容。

西安校区咨询电话

029-85363390 18610973034

0元入学 线上咨询 申请试听
  • 校区地址:西安市高新六路52号立人科技园C座西区4层
    咨询电话:029-85363390 18610973034
    面授课程:JAVA课程培训、Android课程培训、HTML5课程培训
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训、好程序员特训营
  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    深圳西部硅谷校区:深圳市宝安区宝安大道5010号西部硅谷B座A605-619
    咨询电话:0755-86681178/9-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营、UI课程培训
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-602
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营、UI课程培训
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼(经纬中学楼)6/7/8层
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市甘井子区软件园路2号B8座二楼
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905902 027-59905908 027-59905909
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 成都旅游校区:成都市一环路西二段17号四川旅游青羊校区内
    成都华立校区:成都一环路西二段17号华立大厦3楼
    咨询电话:028-83178771 028-61967740
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 了解千锋动态
    关注千锋教育服务号

  • 扫码关注千锋互联
    身边的移动开发导师