如何创建抽象枚举?

时间:2018-12-28 08:54:51

标签: java enums

接下来的问题是,我在Java中有一个获得枚举的组件,但是我需要将该组件与几个与这些枚举有关的ENUM一起使用。

然后,我有两个下一个ENUM

public enum Train{
    A, B, C
}

public enum Bus{
    L,U,V
}

该组件获得一个ENUM,但我想根据先决条件设置火车或公共汽车

如果我选择“公交车”设置为组件“公交车枚举”,那么如果选择“运输车设置”火车枚举

具有下一个模式界面的我托盘:

public interface Transport(){}

public enum Bus implements Transport
publi enum Train implements Transport

但是不起作用,因为该组件调用枚举方法,并且只能设置枚举方法

我无法将Enum传递为泛型,因为我需要对在组件中设置的参数进行一些控制。

有什么主意吗?

2 个答案:

答案 0 :(得分:2)

使用通用类型参数T扩展Enum并实现Transport的方法来实现所需的目标:

interface Transport {}

enum Bus implements Transport {
    A, B, C
}

enum Train implements Transport {
    L, U, V
}

public class Test<T extends Enum & Transport> {
    private T transport;

    Test(T transport) {
        this.transport = transport;

        // Can still use enum methods
        System.out.println(this.transport.name());
        System.out.println(this.transport.ordinal());
    }

    public static void main(String[] args) {
        new Test(Train.L); // prints out "L", "0"
    }
}

答案 1 :(得分:0)

您不能这样做,请检查jls-8.9,您会在下面看到消息

  

枚举类型(第8.9节)不能声明为抽象;这样做会导致   出现编译时错误。

     

一个枚举类型是隐式最终的,除非它包含至少一个枚举   具有类主体的常量。

     

显式声明一个枚举类型是一个编译时错误   最终。