我可以获得Java类的可变数量的泛型类型,还是一般而言?

问题描述 投票:0回答:1

我想用“ EnumTuple”的名字来伪造一个通用的数据类,它将来自不同Enum类的自然数量的不同Enum元素存储在一个Tuple中。假设我有这三个Enum类:

public Enum Gender {
    FEMALE, MALE, OTHER
}

public enum Age {
    YOUNG, MIDDLEAGED, OLD
}

public enum Personality {
    EXTROVERT, INTROVERT
}

我希望能够像这样实例化EnumTuple类:

EnumTuple person1 = new EnumTuple<Gender, Age, Personality>(Gender.OTHER, Age.MIDDLEAGED, Personality.EXTROVERT);
EnumTuple person2 = new EnumTuple<Personality, Gender>(Personality.INTROVERT, Gender.FEMALE);
EnumTuple person3 = new EnumTuple<Age>(Age.OLD);

但是我不知道如何到达那里,或者甚至不可能用Java或Kotlin编写这样的数据类,因为看起来每个类只能具有固定数量的泛型。

[对于那些好奇的人,我正在尝试实现干净而通用的候选消除算法(https://artint.info/html/ArtInt_193.html)版本,其中输入功能集是我要设计的枚举元素的元组。

最后,如果您手头有一个解决方法,或者知道另一种支持可变数目的泛型类型的编程语言,请告诉我

java generics kotlin tuples variadic
1个回答
0
投票

您无法用Java或Kotlin做到这一点,因为正如您想象的那样,每个类只能具有固定数量的泛型类型。

您唯一可以在不事先手动指定所有组合的情况下执行的解决方法,是每次使用枚举创建带有EnumTuplevararg Enum<*>时都要检查枚举的实例。

例如(在Kotlin中)

class EnumTuple(vararg enums: Enum<*>)

[...]或知道另一种支持可变数目的泛型类型的编程语言,请让我知道。

C ++使用可变参数模板支持此功能。https://en.cppreference.com/w/cpp/language/parameter_pack

© www.soinside.com 2019 - 2024. All rights reserved.