gpt4 book ai didi

java - 在方法接受类中使用枚举的接口(interface)方法

转载 作者:太空狗 更新时间:2023-10-29 22:48:53 25 4
gpt4 key购买 nike

我有一个方法需要接受一个 Enum 类。这些枚举实现了一个接口(interface)。现在我需要访问像 ordinal()、name() 等枚举方法和我的接口(interface)方法。我试过的:

public <T extends ConfigFeature, Enum> void showEnabledFeatures(Class<T> enumType, long mask) {
List<T> list = Arrays.asList(enumType.getEnumConstants());
list.forEach(item -> {
// My interface's method, works fine
item.getMask();
// Enum method doesn't work:
// item.ordinal();
});
}

颠倒顺序会颠倒工作:

public <T extends Enum, ConfigFeature> void showEnabledFeatures(Class<T> enumType, long mask) {
List<T> list = Arrays.asList(enumType.getEnumConstants());
list.forEach(item -> {
// My interface's method, doesn't work now
// item.getMask();
// Enum method now works:
item.ordinal();
});
}

有没有办法从接口(interface)和枚举中访问这两种方法?

最佳答案

您使用错误的语法来说明 T 必须实现此接口(interface)并且是一个枚举。

这个:

<T extends ConfigFeature, Enum>

不是将 T 限制为 Enum,而是实际上创建了一个名为 Enum 的新通用参数。

同样,

<T extends Enum, ConfigFeature>

未将 T 约束到 ConfigFeature。您正在声明一个名为 ConfigFeature 的新通用参数。

正确的语法是使用&:

<T extends Enum<T> & ConfigFeature>

请注意,这里的顺序实际上很重要! Enum 只能在前。

根据 here ,只有第一个约束可以是类,后面的必须都是接口(interface):

TypeParameter:
{TypeParameterModifier} Identifier [TypeBound]

TypeParameterModifier:
Annotation

TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}

AdditionalBound:
& InterfaceType

关于java - 在方法接受类中使用枚举的接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49188232/

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