gpt4 book ai didi

java - 无法找出 HashMap 的正确类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:21 24 4
gpt4 key购买 nike

filter.put("a", EnumA.class);I got following setup:

public interface InterfaceA {
abstract public Object[] foo();
}

public enum EnumA implements InterfaceA {
RED();
...
}

public enum EnumB implements InterfaceA {
OAK();
...
}

现在我想使用这个构造类型保存,我得到了这个:

private <T extends Enum<T> & InterfaceA> void  importSettingViaEnum(Class<T> clazz) { ...
for (T elem : clazz.getEnumConstants()){
... = f(elem.ordinal());
... = elem.foo();
...
}
}

这似乎是正确的,clazz 应该只对上面的枚举起作用。但是现在,我无法弄清楚这张 map 的正确类型,这是行不通的:

public <T extends Enum<T> & InterfaceA> Main() {
Map<String, Class<T>> filter = new HashMap<>();
filter.put("a", EnumA.class);
filter.put("b", EnumB.class);
importSettingViaEnum(filter.get("a"));
}

有人知道吗?我希望这个东西类型安全。

这里有一些 pastebin:https://pastebin.com/fKxtBGBe


编辑 1:

试过类似的东西,但它不会工作......

public Main() {
Map<String, Class<? extends Enum<? extends InterfaceA>>> filter = new HashMap<>();
filter.put("a", EnumA.class);
filter.put("b", EnumB.class);
importSettingViaEnum(filter.get("a")); // BREAK THE BUILD
}

最佳答案

类型删除...提供泛型类型参数的类型对象。

public <T extends Enum<T> & InterfaceA> void main(Class<T> type) {
Map<String, Class<T>> filter = new HashMap<>();
filter.put("a", type);
//importSettingViaEnum(filter.get("a"));
}

main(EnumA.class);

这也解耦了实现类型 (EnumA)。


或者寻求部分类型安全

public void main2() {
Map<String, Class<? extends InterfaceA>> filter = new HashMap<>();
filter.put("a", EnumA.class);
Class<? extends InterfaceA> type = filter.get("a");
if (type.isEnum()) {
....
}
}

如果需要,将类型转换为枚举。

关于java - 无法找出 HashMap 的正确类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233202/

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