转自:https://course.tianmaying.com/java-basic+generic-basic#1

泛型类 (很重要的一个自定义的类型)

在使用泛型时,我们可以把类型作为参数传入到泛型类中。类似于把参数传入到方法中一样。我们来实现一个通用的泛型Point类:

public class Point<T> {    private T x;
    private T y;

    public T getX() {        return x;
    }

    public void setX(T x) {        this.x = x;
    }

    public T getY() {        return y;
    }

    public void setY(T y) {        this.y = y;
    }
}

此时Point成为了一个泛型类,T是则是类型参数,T具体是什么类型那要看程序运行的时候我们传入什么类型给他。

使用泛型类时,注意实际传入的类型参数不能是原生类型,必须是引用类型,因此如果希望传入int类型的话,那么需要传入int对应的包装类Interger。对应地,double类型则要传入包装类Double

public class Test{    public static void main(String[] args){
        // 坐标为int类型,把int类型的包装类Integer作为参数传入泛型类中
        Point<Integer> point1 = new Point<Integer>();
        point1.setX(1);
        point1.setY(1);

        // 坐标为double类型,把double类型的包装类Double作为参数传入泛型类中
        Point<Double> point2 = new Point<Double>();
        point2.setX(3.456);
        point2.setY(4.789);
    }
}

Point<Integer>基本等价于第一节中的Point类,而Point<Double>则基本等价于DoublePoint类。

我们再举一个例子,我们定义一个容器类Container,这个容器中可以存放各种类型的对象,可以使用泛型类实现这一特性。

public class Container<T> {    private T variable;

    public Container () {        variable = null;
    }

    public Container (T variable) {        this.variable = variable;
    }

    public T get() {        return variable;
    }

    public void set(T variable) {        this.variable = variable;
    }

    public static void main(String[] args) {        Container<String> stringContainer = new Container<String>();
        stringContainer.set("this is a string");
    }
}

我们实例化Container对象时,只需设置它使用的类型,如:

Container<String> stringContainer = new Container<String>();
stringContainer.set("this is a string");

在下一节中,我们将学习到Java为我们提供的非常实用的容器类(也称之为集合类)。

泛型也可以直接应用在一个方法中,不要求这个方法所属的类为泛型类。例如我们要获取一个对象的类名称:

public class Printer {    public static <T> void printArray(T[] objects) {        if (objects != null) {            for(T element : objects){
                System.out.printf("%s",element);
            }
        }
    }

    public static void main(String[] args) {
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Character[] charArray = { 'T', 'I', 'A', 'N', 'M', 'A', 'Y', 'I', 'N', 'G' };

        printArray(intArray);
        printArray(charArray);
    }
}

与泛型类不同的是泛型方法需要在方法返回值前用尖括号声明泛型类型名,这样才能在方法中使用这个标记作为返回值类型或参数类型。

(011) java后台开发之泛型类相关推荐

  1. (001) java后台开发之流程初识

    java 后台开发流程 这篇文章为了奠基一下被我打入冷宫两个月左右的iOS开发,因为之前由于iOS项目停止的原因,被调至后台开发,两个月中也学习到了很多关于Java.sql.js.jsp的内容,感谢我 ...

  2. 长沙哪招jaVa后端开发人才_求职:Java后台开发-何柄融-湖南大学

    联系方式 找到工作了,就不乱发了.谢谢. 个人信息 何柄融/男/1997 本科/湖南大学/自动化专业/19届 技术博客:何柄融​www.zhihu.com 期望职位:java后台开发 项目经历 蔬菜大 ...

  3. Java后台开发Tomcat添加https支持小程序开发过程

    文章原文:blog.ouyangsihai.cn >> Java后台开发Tomcat添加https支持小程序开发过程 1 给自己的域名申请证书 注意:申请好了如果不是在腾讯注册的域名,不会 ...

  4. 蘑菇街Java后台开发一二面面经

    蘑菇街Java后台开发一二面面经 ​ ​ ​ ​ 本菜鸡妹妹的春招上岸之路,第一次挂经献给蘑菇街. 时间线 时间 状态 2020/3/6 内推投递后端开发岗位 2020/3/11 邮件确认一面时间 2 ...

  5. 【Java后台开发规范】--- 圈复杂度

    文章目录 前言 其他类型的规范 圈复杂度 提炼方法 if.else 卫语句 去else 策略模式 switch 循环嵌套 其他建议 前言 做Java开发的,大多数可能都有看过阿里的Java后台开发手册 ...

  6. 实习收获—Java后台开发

    实习上的收获 前言 Swagger2 Zxing二维码条形码 Restful Api Lombok WebSoecket Quartz 还有很多知识 最后 前言 这是我第一次工作的收获,其实也不多,但 ...

  7. 用IDEA进行Java后台开发(一)

    想尝试着进行java后台开发,发现能找到的完整工程教程很多都是用eclipse开发的,于是照着搭了一套开发环境,也简单的写了一个测试代码,由于好几年没有使用eclipse了,快捷键实在用的费劲,遂找到 ...

  8. 用IDEA进行Java后台开发(三)

    在上一篇用IDEA进行Java后台开发(二)中我们已经可以成功的调用我们所写的接口,并且做了一些简单的逻辑处理, 由于后台开发离不开数据,所以这篇将进行Servlet于MySQL数据库链接和简单的调用 ...

  9. 跨专业转计算机拿下百度java后台开发的经验分享

    前言 本文出自我的一位朋友,他是跨专业最终成功转行计算机,拿下了百度的java后台开发offer,之前他一直说着要给大家分享一波经验,今天完成了写作,希望对大家有帮助.(PS:另外也欢迎大家投稿分享自 ...

最新文章

  1. macos终端快捷键
  2. 题目1168:字符串的查找删除
  3. [总结]vue开发常见知识点及问题资料整理(持续更新)
  4. 让你的程序只能运行一个实例
  5. Linux下nginx安装与配置
  6. 微信小程序php实现登陆的代码,微信小程序实现微信登录
  7. 排序算法(3)----归并排序
  8. js 正则验证数字和小数
  9. 搭建Hadoop集群(二)
  10. python中的scatter函数_Python Matplotlib scatter函数:绘制散点图
  11. android更改应用图标大小,Android选项菜单:更改图标大小
  12. 实战Kaggle比赛(二)——房价预测
  13. 抖音上热门涨粉的窍门总结出来了,4种方法那种适合你?
  14. 全球及中国3D打印人体器官行业发展态势及前景策略分析报告2022-2028年
  15. ABAQUS中inp文件的使用和书写
  16. 计算机系统文件夹打不开,电脑系统的文件夹打不开可以试下这两个办法
  17. MarkdownPad的安装,打开.md文件
  18. 关于α测试与β测试的区别
  19. CSS3 实现太极图案
  20. Camera ISO、快门、光圈、曝光这几个概念

热门文章

  1. 送书拉!给开发者们的几本书籍 |福利
  2. 给妹子讲python-S01E19解析Python内嵌作用域与函数闭包
  3. java 读取配置文件中的列表
  4. iOS沙盒路径及路径下数据的存储和读取
  5. linux命令:系统裁剪之五dropbear嵌入式系统专用ssh服务
  6. 百度网页分享js代码
  7. iPad随想:苹果的妙招、谷歌的尴尬和中移动MM的局限
  8. 计算机调查取证分析篇
  9. Oracle查询数据库编码
  10. linux部署MantisBT(三)部署MantisBT