首页 > 解决方案 > 可选的泛型类型参数

问题描述

我想声明一个适用于三元组的泛型类-key和.valuemetadata

keyvalue字段是必需的,但该字段metadata是可选的。

class Triplet<K,V,M>{
    K key;
    V value;
    M metadata;
    //setters and getters
}

在使用上面的类时,我必须像下面这样初始化它 -

Triplet<Integer, String, String> t1 = new Triplet<>();
// Setters

但是对于某些用例metadata是可选的。因此,当我null用作第 3 种类型参数时,编译器会给出错误 -

Triplet<Integer, String, null> t2 = new Triplet<>();

我应该如何正确实例化适用于多种类型的参数化类型,其中在使用站点指定的类型参数之一是可选的?

标签: javagenericsjava-8

解决方案


你可以使用Void例如

Triplet<Integer, String, Void> t2 = new Triplet<>();

推荐阅读