Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现接口的Enum类的Java数组也接受未实现接口的其他Enum_Java_Arrays_Enums_Interface_Extend - Fatal编程技术网

实现接口的Enum类的Java数组也接受未实现接口的其他Enum

实现接口的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

我有java枚举,它实现了如下所示的方向接口

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配置,它返回一个实现方向接口的枚举数组。