Java 实现enum以实现反向兼容性

Java 实现enum以实现反向兼容性,java,enums,compatibility,java1.4,backport,Java,Enums,Compatibility,Java1.4,Backport,在Java1.8中运行的应用程序必须在Java1.4中运行。应用程序使用了大量常量(数千个),并且所有内容都是使用函数枚举实现的。哪种方法是使其反向兼容的最佳方法 编辑: 我已经看到了一些答案,但没有一个是令人满意的。所以,为了弄清楚我在这里试图实现什么,请看下面的一个小例子 public class SomeType { public enum TYPE { ERROR("allError","4"), INPUT("allInput","5"),

在Java1.8中运行的应用程序必须在Java1.4中运行。应用程序使用了大量常量(数千个),并且所有内容都是使用函数枚举实现的。哪种方法是使其反向兼容的最佳方法

编辑:

我已经看到了一些答案,但没有一个是令人满意的。所以,为了弄清楚我在这里试图实现什么,请看下面的一个小例子

public class SomeType
{
    public enum TYPE
    {
        ERROR("allError","4"),
    INPUT("allInput","5"),
        OFFLINE("allOffline","6"),;

        private final String type;
        private final String desc;

        TYPE(String type, String desc)
        {
            this.type = type;
            this.desc = desc;
        }
        public String getType(){
            return this.type;
        }
        public String getDesc(){
            return this.type;
        }
    }
}
}
它将被类似于

for (SomeType.TYPE type: SomeType.TYPE.values())
        {
            if(nodeValue.equalsIgnoreCase(type.getType()))
            {
                value=type.getDesc();
                break;
            }
        }

因此,这在1.4中永远不会兼容,因此我必须编写大量样板代码,正如@Gene在他提供的链接中所解释的那样。由于有这么多这样的类,其中包含非常大的常量列表,我觉得需要一种更好的方法。因此,问题是寻找更好的解决方案。

您可以在所有使用枚举的地方使用接口-这样您就不必更改Java 5+中的枚举实现

public interface Type {
   String getDesc();
   String getType();
}
Java 5+中的接口实现将是相同的:

public enum TYPE implements Type
{
    ERROR("allError","4"),
    INPUT("allInput","5"),
    OFFLINE("allOffline","6"),;

    private final String type;
    private final String desc;

    TYPE(String type, String desc)
    {
        this.type = type;
        this.desc = desc;
    }
    public String getType(){
        return this.type;
    }
    public String getDesc(){
        return this.type;
    }
}
在Java 5中,您必须使用apache commons中的枚举或自定义实现实现该类型(最好是使用一些代码生成器获取枚举并将其转换为Java 5之前的类)

消费代码:

for (Type type: types)
    {
        if(nodeValue.equalsIgnoreCase(type.getType()))
        {
            value=type.getDesc();
            break;
        }
    }
其中types是Type[]。 我不知道是否使用switch语句,但循环可以正常工作


因此,这样您就不必为enum使用者编写单独的代码,但仍然需要将enum重写为enum。

检查此链接,我在回答中演示了如何复制enum的大部分功能(包括成员方法):。这项技术不能很好地使用
开关
。但是你在一个标量成员值上设置了一个开关。@11维我确实看到了这个。“但我的问题更多的是当涉及到转换案例时。”你的回答更好地解释了这一点。正如你在回答中提到的,我“不快乐”!但是我想我不得不接受这个事实。一个生成1.4个源的源转换似乎是最灵活的。枚举后端口存在,但应进行转换。