美文网首页
泛型方法——简化元组的使用

泛型方法——简化元组的使用

作者: 呆呆李宇杰 | 来源:发表于2017-09-10 16:33 被阅读21次

通过泛型方法简化元组的创建

通过泛型的类型参数推导判断,再加上static方法,可以编写出一个更方便的元组工具用于创建元组。

public class Tuple {
    public static <A, B> TwoTuple<A, B> tuple(A a, B b) {
        return new TwoTuple<>(a, b);
    }

    public static <A, B, C> ThreeTuple<A, B, C> tuple(A a, B b, C c) {
        return new ThreeTuple<>(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);
    }

    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);
    }
}

以下的TupleTest2类是用于测试Tuple工具类的代码。

import static com.daidaijie.generices.tuple.Tuple.tuple;

public class TupleTest2 {
    static TwoTuple<String, Integer> f() {
        return tuple("h1", 47);
    }

    static TwoTuple f2() {
        return tuple("h1", 47);
    }

    static ThreeTuple<Amphibian, String, Integer> g() {
        return tuple(new Amphibian(), "h1", 47);
    }

    static FourTuple<Vehicle, Amphibian, String, Integer> h() {
        return tuple(new Vehicle(), new Amphibian(), "h1", 47);
    }

    static FiveTuple<Vehicle, Amphibian, String, Integer, Double> k() {
        return tuple(new Vehicle(), new Amphibian(), "h1", 47, 11.1);
    }

    public static void main(String[] args) {
        TwoTuple<String, Integer> ttsi = f();
        System.out.println("ttsi = " + ttsi);
        System.out.println("f2() = " + f2());
        System.out.println("g() = " + g());
        System.out.println("h() = " + h());
        System.out.println("k() = " + k());
    }
}
// Outputs
ttsi = (h1, 47)
f2() = (h1, 47)
g() = (com.daidaijie.generices.tuple.Amphibian@1540e19d, h1, 47)
h() = (com.daidaijie.generices.tuple.Vehicle@677327b6, com.daidaijie.generices.tuple.Amphibian@14ae5a5, h1, 47)
k() = (com.daidaijie.generices.tuple.Vehicle@7f31245a, com.daidaijie.generices.tuple.Amphibian@6d6f6e28, h1, 47, 11.1)

这里要注意的是,方法f()返回的是一个参数化的TwoTuple对象,而f2()返回的是非参数化的TwoTuple对象。而在这里编译器并没有发出警告信息,这是因为这里没有将其返回值作为一个参数化对象使用。而在某种意义上,它被"向上转型"作为一个非参数化的TwoTuple。这个时候,如果试图将f2()的返回值转型为参数化的TwoTuple,编译器就会发出警告。

相关文章

  • 泛型方法——简化元组的使用

    通过泛型方法简化元组的创建 通过泛型的类型参数推导判断,再加上static方法,可以编写出一个更方便的元组工具用于...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • Java泛型

    泛型 基本使用 在泛型类中使用,应用在接受多种类型的参数,保证向下转型的时候不会抛出异常 泛型方法 使用泛型方法时...

  • java基础-day13-泛型

    泛型 1. 泛型 1.1 为什么要使用泛型 1.2 泛型的基本格式 1.3 泛型在方法中使用 1.3 泛型在类内的...

  • 泛型基础二

    如果不明白为什么要使用泛型,使用泛型的好处,以及泛型类,泛型接口,泛型方法等知识,请移步泛型基础一 通配符 上界通...

  • Java编程思想—泛型(1)

    Java编程思想---泛型(1) 泛型 简单使用 三个Holder进行对比,引出类型参数的概念 元组类库 前面的例...

  • 泛型,复习

    Java泛型详解:和Class的使用。泛型类,泛型方法的详细使用实例 - LZJWXJ树袋熊 - CSDN博客

  • java泛型

    一、泛型接口: 二、泛型方法 原则上,能够使用泛型方法的时候就尽量避免使用泛型类,这会使你的代码看上去更加清楚。另...

  • 易错点

    泛型 泛型约束使用extends而非implements 泛型类型没有多态的说法,所以出现了?通配符 泛型方法必须...

网友评论

      本文标题:泛型方法——简化元组的使用

      本文链接:https://www.haomeiwen.com/subject/sjctsxtx.html