写这篇博文,我并没有特别大的把握。姑且贴代码做分析。遇到什么知识点分析什么知识点吧。


class Person<T> {private T age;public void setAge(T age) {this.age = age;}public T getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Person<String> p = new Person<String>();p.setAge("3 years old");System.out.println(p.getAge());Person<Integer> p2 = new Person<Integer>();p2.setAge(3);System.out.println(p2.getAge());}
}

根据贴的这个代码我知道所谓的泛型就是在定义类的时候先不给他确定类内部的一些类型定义。在具体实现对象的时候再给根据需要给予合适的类型。

Person<String> p = new Person<String>

需要注意一下这个地方实现的写法。嗯这个例程就这么点知识。贴下一个


class Person<T> {private T age;public void setAge(T age) {this.age = age;}public T getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Person<String> p = new Person<String>();p.setAge("3 years old");//System.out.println(p.getAge());printInfo(p);Person<Integer> p2 = new Person<Integer>();p2.setAge(3);//System.out.println(p2.getAge());printInfo(p2);Person<?> p3;p3 = p;//p3.setAge("4 years");p3.getAge();}public static void printInfo(Person<?> p) {System.out.println(p.getAge());}}

这个代码,跟第一次贴的包含的知识点在于

        Person<?> p3;p3 = p;//p3.setAge("4 years");p3.getAge()

我们p赋值给定义的一个用通配符设置的p3后。我们的p3竟然没有了设置age的能力。这个特性听特殊的。
继续贴代码


class Person<T> {private T age;public void setAge(T age) {this.age = age;}public T getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Person<String> p = new Person<String>();p.setAge("3 years old");//System.out.println(p.getAge());printInfo(p);Person<Integer> p2 = new Person<Integer>();p2.setAge(3);//System.out.println(p2.getAge());printInfo(p2);Person<?> p3;p3 = p;//p3.setAge("4 years");p3.getAge();printInfo2(p);printInfo2(p2);printInfo2(p3);}public static void printInfo(Person<?> p) {System.out.println(p.getAge());}public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}}

这个代码感觉没什么技术含量,不说了继续。


class Person<T> {private T age;public void setAge(T age) {this.age = age;}public T getAge() {return this.age;}
}class Student<T> extends Person<T> {}class Student2 extends Person<String> {}public class Generics {public static void main(String args[]) {Person<String> p = new Person<String>();p.setAge("3 years old");//System.out.println(p.getAge());printInfo(p);Person<Integer> p2 = new Person<Integer>();p2.setAge(3);//System.out.println(p2.getAge());printInfo(p2);Person<?> p3;p3 = p;//p3.setAge("4 years");p3.getAge();printInfo2(p);printInfo2(p2);printInfo2(p3);Student<Integer> s = new Student<Integer>();s.setAge(10);printInfo(s);Student2 s2 = new Student2();s2.setAge("11 years");printInfo(s2);}public static void printInfo(Person<?> p) {System.out.println(p.getAge());}public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}}

这个代码的核心知识点在于泛型类的继承

class Student<T> extends Person<T> {}class Student2 extends Person<String> {}

我们继续铁代码分析


interface Person<T> {public void setAge(T age);public T getAge();
}class Student<T> implements Person<T> {T age;public void setAge(T age){this.age = age;}public T getAge() {return this.age;}
}class Student2 implements Person<String> {String age;public void setAge(String age){this.age = age;}public String getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Student<Integer> s = new Student<Integer>();s.setAge(10);printInfo(s);Student2 s2 = new Student2();s2.setAge("11 years");printInfo(s2);}public static void printInfo(Person<?> p) {System.out.println(p.getAge());}public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}}

这个代码的重点在于

    public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}

想要在方法中使用泛型需要在static后面添加<T>。写到这里猛然想到如果把这个static去掉会怎样呢?肯定不可以。如果去掉static那么main函数中就不能够直接使用这个函数了,必须首先做generics这个类的实现。然后再去调用printInfo函数。
继续贴图:


interface Person<T> {public void setAge(T age);public T getAge();
}/* Integer, Float */
class Student<T extends Number> implements Person<T> {T age;public void setAge(T age){this.age = age;}public T getAge() {return this.age;}
}class Student2 implements Person<String> {String age;public void setAge(String age){this.age = age;}public String getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Student<Integer> s = new Student<Integer>();s.setAge(10);printInfo(s);Student2 s2 = new Student2();s2.setAge("11 years");printInfo(s2);}public static void printInfo(Person<?> p) {System.out.println(p.getAge());}public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}}

介个么,就是弄出来个接口类来风骚一下。接口类中的都是全局变量跟抽象函数。别的没啥了。继续贴图


interface Person<T> {public void setAge(T age);public T getAge();
}class Student<T> implements Person<T> {T age;public void setAge(T age){this.age = age;}public T getAge() {return this.age;}
}class Student2 implements Person<String> {String age;public void setAge(String age){this.age = age;}public String getAge() {return this.age;}
}public class Generics {public static void main(String args[]) {Student<String> s = new Student<String>();s.setAge("10");printInfo(s);Student2 s2 = new Student2();s2.setAge("11 years");printInfo(s2);}public static void printInfo(Person<? super String> p) {System.out.println(p.getAge());}public static <T> void printInfo2(Person<T> p) {System.out.println(p.getAge());}}

这部分讲解的是一个泛型的上限跟下限。super只能跟通配符来使用不能跟着<T>来使用也就是说只能在方法实现的时候用。而且经过编程测试,在方法实现中,<T>也是不能够跟super做搭档的。
我编写java代码较少。具体还需要后续继续深化吧。

JAVA进阶day08泛型相关推荐

  1. 0.Java进阶学习之泛型

    1. 什么是泛型? 泛型是Java SE 1.5的新特性. "泛型"意味着编写的代码可以被不同类型的对象所重用. 泛型的本质是参数化类型. 也就是说,泛型是将所操作的数据类型作为参 ...

  2. java进阶案例下载_java进阶案例

    java进阶案例: 数据类型,字符,数值,范围,布尔 :byte -128~127. 面向对象:protect :重载与构造 (一). this封装:static:继承:多态: 1.方法覆盖:supe ...

  3. Java进阶之对象克隆(复制)

    转载自   Java进阶之对象克隆(复制) 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bo ...

  4. JAVA进阶教学之(集合)

    目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...

  5. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!

    Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...

  6. Java 自学路线图之 Java 进阶自学

    文章目录 Java 自学路线图的第二阶段是 Java 语言进阶自学,在自学了第一阶段的 Java 基础自学后,大家对 Java 语言编程有了初步的了解和认识,建议在第一部分自学后整理一下自己的自学思路 ...

  7. 夯实JAVA基本之一 —— 泛型详解(1):基本使用

    前言:无论何时,相信自己. 相关文章: 1.<夯实JAVA基本之一 -- 泛型详解(1):基本使用> 2.<夯实JAVA基本之一--泛型详解(2):高级进阶> 3.<夯实 ...

  8. JAVA进阶的基础知识快速通过---自学笔记(二)

    温故而知新---陆续学习陆续更新中,你有更好的记忆和学习方法,请在评论区提出来大家一起交流,认真看完,一行行代码备注看完看懂,保证学会,学不会找我. 前言: 代码学完发现很简单,很多初学者搞不明白什么 ...

  9. 抖音Java后端开挂,全靠这份啃了48天【Java进阶核心知识集+刷:25专题面试】

    人人都想进大厂,当然我也不例外.早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败.突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡,后期 ...

最新文章

  1. Android studio安装与调试
  2. Java Day01-2
  3. python3 pyquery模块 解析html网页
  4. lua require dofile loadfile区别
  5. Java进程占用CPU资源过多分析
  6. 每日一笑 | 一些关于学编程的领悟
  7. 卸载jlink驱动出现Could not open INSTALL.LOG file错误解决方案
  8. Factorization Machine 1
  9. 打谱软件-Avid Sibelius 8.5.0 macOS
  10. sift算法matlab详解,sift算法原理详解及应用
  11. Win10系统Qt安装及配置
  12. 500MHz频率源设计(西电通院高频大作业)
  13. 爬取QQ空间说说及简易数据分析
  14. 用于应用开发的新数据可视化模板
  15. 大连居民楼爆炸原因查明 责任人厌世开燃气阀门自杀
  16. 和领导相处的10条法则,越早知道越好
  17. 基于 Lotus Expeditor on Device 的手机银行交易开发
  18. 蓝牙耳机哪个品牌最好?数码博主整理2023超高性价比蓝牙耳机推荐
  19. 开源的压力测试工具 PyLot
  20. 车载产品Bootloader功能的应用与实现

热门文章

  1. 介绍一种Web上打印技术
  2. python对象引用计数器_在Python中借助计数器对象对项目进行计数
  3. 基于边缘计算的实时绩效_基于绩效的营销中的三大错误
  4. data studio_面向营销人员的Data Studio —报表指南
  5. PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习
  6. 869. 重新排序得到 2 的幂
  7. leetcode 724. 寻找数组的中心索引
  8. rails i18n模型_Rails国际化的完整指南(i18n)
  9. Flask基础(03)--创建第一个Flask程序
  10. chrome瀏覽器去掉緩存的方法