我有一个实用程序类,需要在通用类上工作,但必须仅限于那些枚举并实现特定接口的类。
// 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 是一个单例,然后可以根据需要更新枚举/接口。其操作的返回值将根据给定的枚举而变化。我不想在其上使用泛型,因为这需要为枚举的每次更改创建一个新实例。已经有很多代码在使用它,因此偏离单例的行为不会被批准。所以必须保留一个参考。我想我只能强制执行接口要求,然后检查 setter 方法,它是一个枚举,否则会抛出异常,但这并不理想。
Edit(更新了问题并添加了更多细节)
据我记得,你只能声明交叉口类型(这是什么&
创建)用于类和方法的类型参数。不能直接声明具有交集类型的局部变量;您可以借助类或方法类型参数创建此类变量,如 milkplusvellocet 的答案所示。
请参阅类似问题的答案中的 JLS 参考:https://stackoverflow.com/a/6643378/282229 https://stackoverflow.com/a/6643378/282229
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)