`
韩悠悠
  • 浏览: 839842 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

泛型讨论------一个元组类库

阅读更多

仅一个方法调用就能返回多个对象,我们应该经常有这样的需求,可是return语句只允许返回单个对象。因此,解决的办法就是创意一个对象。

就是我要说的元组,即:将一组对象直接打包存储与其中的一个单一对象,一个容器对象允许读取其中元素,但是不允许向其中存放新的对象。

 

看例子说问题:

 

 

public class TwoTuple<A,B>{

	public final A first;
	public final B second;
	
	public TwoTuple(A a,B b){
		first = a;
		second = b;
	}

	public String toString(){
		return "("+first+" .."+second+")";
	}
}

 

 

 

我们可以使用继承机制实现长度更长的元组,办法就是增加类型参数

 

 

public class ThreeTuple<A,B,C> extends TwoTuple<A,B> {
  public final C third;
  public ThreeTuple(A a, B b, C c) {
    super(a, b);
    third = c;
  }
  public String toString() {
    return "(" + first + ", " + second + ", " + third +")";
  }
} 

 

 

public class FourTuple<A,B,C,D> extends ThreeTuple<A,B,C> {
  public final D fourth;
  public FourTuple(A a, B b, C c, D d) {
    super(a, b, c);
    fourth = d;
  }
  public String toString() {
    return "(" + first + ", " + second + ", " +
      third + ", " + fourth + ")";
  }
}

 

 

 

public class FiveTuple<A,B,C,D,E>
extends FourTuple<A,B,C,D> {
  public final E fifth;
  public FiveTuple(A a, B b, C c, D d, E e) {
    super(a, b, c, d);
    fifth = e;
  }
  public String toString() {
    return "(" + first + ", " + second + ", " +
      third + ", " + fourth + ", " + fifth + ")";
  }
} 

 

 

为了使用元组,我们只需定义一个长度合适的元组,将其作为方法的返回值,然后再return语句中创建该元组,然后返回即可。

 

看下来的例子,很经典,值得收藏

 

public class Tuple {
  public static <A,B> TwoTuple<A,B> tuple(A a, B b) {
    return new TwoTuple<A,B>(a, b);
  }
  public static <A,B,C> ThreeTuple<A,B,C>
  tuple(A a, B b, C c) {
    return new ThreeTuple<A,B,C>(a, b, c);
  }
  public static <A,B,C,D> FourTuple<A,B,C,D>
  tuple(A a, B b, C c, D d) {
    return new FourTuple<A,B,C,D>(a, b, c, d);
  }
  public static <A,B,C,D,E>
  FiveTuple<A,B,C,D,E> tuple(A a, B b, C c, D d, E e) {
    return new FiveTuple<A,B,C,D,E>(a, b, c, d, e);
  }
}

 

由于有了泛型,你可以很容易的创意元组,只是编写表达式而已!

 

 

分享到:
评论

相关推荐

    ts typescript.txt

    02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) (上) (20分29秒).rar 03 Typescript中的数据类型 任意类型 (any) null 和 undefined ...

    C#知识类库

    - 元组:方便地组合多个值,支持解构赋值。 - 使用`using`声明自动管理资源的生命周期。 7. **.NET框架与C#的集成** - ADO.NET:处理数据库交互,如DataSet、DataTable、SqlCommand等。 - Windows Forms和WPF:...

    C#官网下载的文档

    - 异步编程的一个重要方面,特别是当处理大量数据流时。 - **使用模式匹配扩展数据功能** - 模式匹配是C#中一项强大的功能,可以用来更简洁地处理类型检查和转换。 - **控制台应用程序** - 如何创建简单的控制台...

    C#7 图解教程(2018年版 第5版 英文版 文字版)

    - **元组**:可以直接声明和使用元组,而不必创建匿名类或类库,提高了代码的简洁性。 ##### 4. 面向对象编程 - **类与对象**:详细介绍了如何定义类以及如何创建和使用对象。 - **继承与多态**:解释了继承的概念...

    c#知识类库.rar

    总之,C#知识类库是一个宝贵的资源,涵盖了C#编程中的基础和进阶内容。无论是初学者还是经验丰富的开发者,都可以从中学习到实用的技巧和最佳实践,提升自己的编程技能。通过系统地学习和实践这个类库中的例子,可以...

    DotNetVersionsFetureClassLibraryDemo.rar

    "DotNetVersionsFetureClassLibraryDemo"项目正是为了解决这一问题,它以一个类库的形式,用简洁的代码展示了C#各版本的关键特性,帮助开发者深入理解和应用。 1. **C# 3.0 - 隐式类型(var)和匿名类型** C# 3.0...

    scala-docs-2.11.8.rar

    Scala 2.11.x 是该语言的一个稳定版本系列,它引入了许多改进和优化,旨在提高性能、兼容性和可维护性。2.11.x 版本支持JVM(Java虚拟机)和JS(JavaScript)平台,这使得开发者可以在服务器端和客户端应用中统一...

    双谷网关于IT行业软件开发常用英语词汇大全.docx

    - **Definition**: 设计模式之一,用于将一个类的接口转换成客户希望的另一个接口,从而使原本由于接口不兼容而不能一起工作的那些类能一起工作。 **Add-In 插件** - **Definition**: 一种小型软件模块,可以添加...

    Swifter - 100 个 Swift 必备 Tips

    例如,函数可以返回一个元组来同时返回两个或更多结果。 #### 6. @autoclosure (自动闭包) `@autoclosure` 是一个属性包装器,它允许延迟表达式的计算,直到实际需要时才执行。这在某些情况下非常有用,比如当参数...

    编程英语汇总

    - 适配器模式是一种设计模式,用于将一个接口转换成客户希望的另一个接口,使原本因接口不兼容而不能一起工作的那些类可以一起工作。 **Address 位址、地址** - 地址在编程中指的是内存中的特定位置,每个地址都...

    计算机编程常用英语单词.doc

    - **应用场景**: 将一个值赋予一个变量的过程。 - **相关概念**: - **Assignment Operator (指派(赋值)运算子)**: 在大多数编程语言中用 `=` 表示,用于将右侧的值赋给左侧的变量。 #### Attribute (属性) - **...

    编程术语英汉对照,有用的资料

    - **Adapter 配接器**:通常指一种设计模式,用于将一个类的接口转换成客户希望的另一个接口。 - **Address 位址 地址**:表示内存中的特定位置。 - **Address Space 位址空间 定址空间**:指程序可以访问的所有内存...

    C# 9.0文档及编程指南中文版可编辑.rar

    - **泛型**:理解泛型的概念,如何创建泛型类、接口和方法,提高代码复用性。 - **元组**:学习使用元组进行数据打包和解包,以及匿名元组的使用场景。 4. **.NET框架与.NET Core** - **.NET框架**:了解.NET ...

    swift-EasySequence是一个处理sequcence类型的强大基础库例如数组集合字典

    Swift中的EasySequence库是开发者们为了更方便地处理序列类型(Sequence)而创建的一个强大工具。这个库尤其适用于数组、集合和字典等常见的序列数据结构。在Swift标准库中,虽然已经提供了丰富的序列操作,但...

    .Net平台开发的技术规范与实践精华总结(全)

    .Net平台是微软推出的一种用于构建跨平台应用程序的框架,它为开发者提供了丰富的工具、类库和语言支持,以便高效地创建各种类型的应用程序,包括Web应用、桌面应用、移动应用等。本文将深入探讨.Net平台开发的技术...

    软件开发英语词汇

    - 链是指一系列函数调用,每个函数调用返回一个结果,该结果作为下一个函数的输入。 **Character 字符** - 字符是指在编程语言中代表文字或符号的最小单位。 **Character Format 字符格式** - 字符格式是指用于...

    程序员英语单词册

    - 示例:在一个用户对象中,“年龄”可以是一个属性。 16. **Audio (音讯/音频)** - 定义:声音信号的电子表示。 - 示例:MP3 文件是一种常见的音频格式。 17. **A.I. (人工智慧/人工智能)** - 定义:研究...

    programming in Scala_ch

    - **元组(Tuple)**: 使用元组来组合多个值作为一个单一的实体。 - **集合(Set)和映射(Map)**: 掌握Scala中用于存储和检索元素的集合框架。 - **函数式风格**: 了解如何运用函数式编程的技巧来编写更简洁、高效的代码...

    Swift基础教程.pdf

    3. 混编:在同一个项目中可以同时使用Swift和Objective-C代码,这对于逐步迁移现有项目非常有用。 由于给定文件内容并没有具体涉及以上知识点,建议获取实际的Swift编程资源来进一步学习和掌握。例如,可以通过苹果...

Global site tag (gtag.js) - Google Analytics