实现接口的Enum类的Java数组也接受未实现接口的其他Enum
我有java枚举,它实现了如下所示的方向接口实现接口的Enum类的Java数组也接受未实现接口的其他Enum,java,arrays,enums,interface,extend,Java,Arrays,Enums,Interface,Extend,我有java枚举,它实现了如下所示的方向接口 public enum AdvanceDirection implements Direction {....} public enum BasicDirection implements Direction {....} 我还有一个枚举非方向,它不实现如下所示的方向 public enum NonDirection {....} public static <T extends Enum<T> & Direction
public enum AdvanceDirection implements Direction {....}
public enum BasicDirection implements Direction {....}
我还有一个枚举非方向,它不实现如下所示的方向
public enum NonDirection {....}
public static <T extends Enum<T> & Direction> Class<T>[] getDirections() {
return new Class[]{AdvanceDirection.class, BasicDirection.class, NonDirection.class};
}
我有一个函数,它应该只返回实现如下方向的枚举类数组
public enum NonDirection {....}
public static <T extends Enum<T> & Direction> Class<T>[] getDirections() {
return new Class[]{AdvanceDirection.class, BasicDirection.class, NonDirection.class};
}
您已经遇到了在Java中使用泛型的已知限制。语言设计者(明智地说,IMO)决定使用类型擦除来限制泛型的引入对运行时引擎的影响。然而,这限制了泛型的一些使用,否则这些泛型看起来是自然的 你的选择是:
我知道你的例子是为了问这个问题而设计的(为此我推荐你),但是你展示的泛型和
Class
对象的使用似乎很不寻常。如果您提供更多关于您试图实现的目标的详细信息,Java中很可能会有一个更自然的解决方案。数组与泛型不兼容。无论如何,您应该使用列表。为什么不直接返回方向[]
?为什么它需要是一个enum
?@MaartenBodewes OP的示例返回一个类数组。返回类型为Direction
的对象数组的建议毫无意义。不,仅返回类毫无意义,特别是当方法名为getDirections
时。请忽略方法名getDirections()。我以它为例。想想getDirections()一个SpringBean配置,它返回一个实现方向接口的枚举数组。getDirections()方法可以假设为SpringBean配置,它返回一个实现方向接口的枚举数组。