我想用“ 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或Kotlin做到这一点,因为正如您想象的那样,每个类只能具有固定数量的泛型类型。
您唯一可以在不事先手动指定所有组合的情况下执行的解决方法,是每次使用枚举创建带有EnumTuple
的vararg Enum<*>
时都要检查枚举的实例。
例如(在Kotlin中)
class EnumTuple(vararg enums: Enum<*>)
[...]或知道另一种支持可变数目的泛型类型的编程语言,请让我知道。
C ++使用可变参数模板支持此功能。https://en.cppreference.com/w/cpp/language/parameter_pack