什么是元祖类

java中的方法只能返回单个对象,如果需要返回多个怎么办?通常我们会创建一个额外的对象,或者把返回内容放入集合中返回,另外,我们也有其他的选择:结合泛型,我们可以把一组对象直接打包存储于单一对象中,之后从该对象中读取元素,并能明确知道各元素的类型,安全的使用它们。

这个概念称为元组,也称为 数据传输对象(即DTO) 或 信使 。

通常,元组可以具有任意长度,元组中的对象可以是不同类型的。不过,我们希望能够为每个对象指明类型,并且从元组中读取出来时,能够得到正确的类型。要处理不同长度的问题,我们需要创建多个不同的元组。下面是一个可以存储两个对象的元组:

public class Tuple2 {

public final A a1;

public final B a2;

public Tuple2(A a, B b) { a1 = a; a2 = b; }

}

public和final的结合保证了元素的可读性和不可修改性。元祖对象的类型组成依赖于传递参数的顺序。

我们可以利用继承来实现更长的元祖:

public class Tuple3 extends Tuple2 {

public final C a3;

public Tuple3(A a, B b, C c) {

super(a, b);

a3 = c;

}

}

public class Tuple4 extends Tuple3 {

public final D a4;

public Tuple4(A a, B b, C c, D d) {

super(a, b, c);

a4 = d;

}

}

使用元组时,你只需要定义一个长度适合的元组,将其作为返回值即可。注意下面例子中方法的返回类型:

public class TupleTest {

static Tuple2 f() {

// 47 自动装箱为 Integer

return new Tuple2<>("hi", 47);

}

static Tuple3 g() {

return new Tuple3<>(new Student(), "hi", 47);

}

}

使用类型参数推断 ,我们可以创建若干重载的静态泛型方法来略去new操作的繁琐性:

public class Tuple {

public static Tuple2 tuple(A a, B b) {

return new Tuple2<>(a, b);

}

public static Tuple3

tuple(A a, B b, C c) {

return new Tuple3<>(a, b, c);

}

}

public class TupleTest {

static Tuple2 f() {

return tuple("hi", 47);

}

static Tuple3 g() {

return tuple(new Student(), "hi", 47);

}

}

java 元祖_JAVA里的元祖类相关推荐

  1. java克隆实现_JAVA里的深克隆与浅克隆实现

    概括起来说,JAVA里想让一个类的实例可以克隆,需要两步: 1.令该类实现Cloneable接口,这是一个标记接口,用来表示这个类是可被克隆的类型(没这个标记的话调用java.lang.Object. ...

  2. java file 对象_Java里File对象的问题。

    Java里File对象的问题. 关注:282  答案:2  mip版 解决时间 2021-02-02 07:14 提问者鉨瞞着所囿亾,爱着誰 2021-02-01 08:59 import java. ...

  3. java外部类_Java里什么叫内部类什么叫外部类

    展开全部 对普通类(没有内部类的类)来说,62616964757a686964616fe78988e69d8331333337396234内部类和外部类都与他无关:对有内部类的类来说,它们就是其内部类 ...

  4. java取得一月_Java里,如何得到一个月有多少天

    展开全部 按照你62616964757a686964616fe78988e69d8331333361326239的要求,如何得到一个月有多少天,这里并没有说是什么年份,所以默认当年(不同年份的月份天数 ...

  5. redis的java客户端名称_java里常用的redis客户端简介

    zepto返回顶部动画 点击返回顶部 function goTop(acceleration, time) { acceleration = acceleration || 0.1; time = t ...

  6. java 二元组_java里有类似于二元组之类的数据结构么?

    二元组(D,R),D是数据元素的有限集,R是D关系上的有限集. 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来 ...

  7. java 汉字 数字_java数字转汉字工具类详解

    /** * Created by 33303 on 2017/7/28. */ import java.math.BigDecimal; /** * 数字转换为汉语中人民币的大写 * */ publi ...

  8. java example 去重_Java中mybatis关于example类的使用详解

    这几天刚接触example,很多内容都是破碎的,写一篇博文加深理解. 一.什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的 ...

  9. 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

    在我的Android应用程序,我想有一类处理所有"写入/读取到文本文件"的行动.所以,我根本就调用我的readUserFile.java文件我想的方法.但我的方法将不会在该文件中工 ...

最新文章

  1. Linux下安装和使用boost库
  2. 使用显式Intent向下一个活动传递数据
  3. 光感是什么_Olay5款热门精华:淡斑小白瓶VS光感小白瓶如何选?超A瓶不太A
  4. 如何把网址配置为http和https可以同时访问
  5. 实名开撕!格力举报奥克斯空调虚标不合格 奥克斯回应:将起诉!
  6. Linux驱动编写(块设备驱动代码)
  7. python的文件读写,序列化,复制/删除目录,压缩/解压缩/列出压缩文件目录,计算CRC32和MD5
  8. mysql运用实例_mysql应用实例
  9. 在指定文件类型中递归查找到目标字符串
  10. 常见机器人离线编程软件对比
  11. 交换机基础知识点思维导图
  12. iOS8官方推荐图标和图像尺寸
  13. 环境科学概论知识点总结
  14. JavaScript 实现延迟合并处理任务
  15. Dragonfly 基于 P2P 的文件和镜像分发系统
  16. 服务端高并发分布式架构演进
  17. Unity (C#) 使用 LitJson 处理 JSON 数据
  18. python爬虫脚本获取网易招聘某个职业的全部数据信息
  19. 漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
  20. Volley添加header发送请求

热门文章

  1. emmet之css语法_使用Emmet加快HTML和CSS的生产
  2. GeneXus的科技基础(GeneXus背后的理论)
  3. dfc trace performance anaysis
  4. Java实现人民币大小写转换
  5. 单相干式变压器红外图像数据集
  6. 如何解决PS“不能完成请求,因为意外的遇到文件尾”?
  7. 记录一次docker安装遇到的坑
  8. Centos7安装trac手册
  9. Ubuntu下同时搭建支持匿名、本地、虚拟用户的ftp服务器
  10. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇