gpt4 book ai didi

Java:混合泛型和 VarArgs

转载 作者:行者123 更新时间:2023-12-01 21:17:10 28 4
gpt4 key购买 nike

我有以下定义某种类型的接口(interface)

public interface BaseInterface {
}

该接口(interface)将用于实现几个枚举,如下所示:

public enum First implements BaseInterface {
A1, B1, C1;
}


public enum Second implements BaseInterface {
A2, B2, C2;
}

我现在想要一个小的可重用方法,其工作方式有点类似于 Enum.valueOf(String),其想法是我提供常量的名称以及可以实现它的所有可能类型。它将返回实现该接口(interface)的枚举对象(我不需要担心两个枚举常量具有相同名称的可能性)。客户端代码将类似于:

BaseInterface myConstant = parse("A1", First.class, Second.class);

我陷入困境的是方法的定义。我正在考虑以下内容:

@SafeVarargs
private final <T extends Enum<T> & BaseInterface > T parse(String name, Class<T>... types) {
// add code here
}

然而,Java 编译器提示类型的定义。它只允许我通过一种独特的类型!以下内容有效:

parse("A1");
parse("A1", First.class);
parse("A1", First.class, First.class);
parse("A1", First.class, First.class, First.class);
parse("A1", Second.class);
parse("A1", Second.class, Second.class);

但有用的版本不是:

parse("A1", First.class, Second.class);

如何告诉 Java 类型 可以采用扩展 Enum 并实现 BaseInterface 的所有类?

最佳答案

您需要使用以下定义:

@SafeVarargs
private static final <T extends Enum<?> & BaseInterface> T parse(String name, Class<? extends T>... types) {
// add code here
}

<? extends T>允许编译器推断出比您传递的特定类型更通用的类型,并且 ? extends Enum<?>T可以是任何通用枚举类型,而不是 T 的特定枚举

关于Java:混合泛型和 VarArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39836150/

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