gpt4 book ai didi

java - 如何在 Java 中声明一个 Class 对象,它是一个枚举和一个接口(interface)

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

我有一个实用程序类需要在通用类上工作,但必须限制为枚举类并实现特定接口(interface)。

// These two work
Class<? extends Enum<?>> enumClass;
Class<? extends MyInterface> interfaceClass;

// This is what I want but does not work
Class<? extends MyInterface & Enum<?>> enumAndInterfaceClass;

对于泛型我可以成功地使用它

public class MyClass<T extends Enum<T> & MyInterface> {
public MyClass(Class<T> theClass) {
...
}
}

但是我不能到处使用泛型,需要单独声明。我不确定这是否可能。
所以我的问题归结为如何声明具有这些约束的成员变量?

所以目前 MyClass 是一个单例,然后可以根据需要更新枚举/接口(interface)。其操作的返回值将根据给定的枚举而改变。我不想在上面使用泛型,因为这需要为枚举的每次更改创建一个新实例。已经有很多代码在使用它,因此偏离单例的代码不会被批准。所以必须保留引用。我想我只能强制执行接口(interface)要求,然后在 setter 方法中检查它是一个枚举,否则会抛出异常,但这并不理想。

编辑(更新问题并添加更多细节)

最佳答案

据我所知,您只能为类和方法的类型参数声明交集类型(这是& 创建的)。不能直接声明交集类型的局部变量;您可以借助类或方法类型参数创建此类变量,如 milkplusvellocet 的答案所示。

请参阅此对类似问题的回答中的 JLS 引用: https://stackoverflow.com/a/6643378/282229

关于java - 如何在 Java 中声明一个 Class<?> 对象,它是一个枚举和一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037008/

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