gpt4 book ai didi

java - EnumMap 和 Java 泛型

转载 作者:行者123 更新时间:2023-11-30 06:17:56 27 4
gpt4 key购买 nike

假设我有两个枚举:

enum MyEnum {A, B, C};
enum YourEnum {D, E, F};

和两个非常相似的类:

class MyRow {
EnumMap<MyEnum, Object> map;
}

class YourRow {
EnumMap<YourEnum, Object> map;
}

有没有办法做这样的事情呢?

class Row<T implements Enum> {
EnumMap<T, Object> map;
}

这样我就可以说Row<MyEnum>Row<YourEnum> ?我只是不想为这些特定枚举中的每一个(我有几十个)定义一个新的 Row 类。

最佳答案

从你的例子看来你可能正在寻找类似的东西

class Row<T extends Enum<T>> {
EnumMap<T, Object> map;
}

你可以像这样使用这个类

Row<MyEnum> row = new Row<>();
row.map.put(MyEnum.A, "foo");//OK
//row.map.put(YourEnum.D, "bar");// Error, `put` from this reference
// is meant to handle `MyEnum`

inside the Row class, it doesn't seem to let me loop through values in the standard way:

for (T col : T.values())

T是通用类型,即 erased at runtimeObject并且对象没有 values()方法。也许你应该考虑包括 Class<T>将在运行时存储您正在使用的 Enum 信息的字段。这个类有getEnumConstants()类似于values()的方法方法。

所以你的代码可以看起来像

class Row<T extends Enum<T>> {
EnumMap<T, Object> map;
Class<T> enumType;

public Row(Class<T> enumType){
this.enumType = enumType;
}

void showEnums(){
for (T col : enumType.getEnumConstants())
System.out.println(col);
}
}

并且可以这样使用,例如

Row<MyEnum> row = new Row<>(MyEnum.class);
row.showEnums();

关于java - EnumMap 和 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com