Java 实现enum以实现反向兼容性
在Java1.8中运行的应用程序必须在Java1.4中运行。应用程序使用了大量常量(数千个),并且所有内容都是使用函数枚举实现的。哪种方法是使其反向兼容的最佳方法 编辑: 我已经看到了一些答案,但没有一个是令人满意的。所以,为了弄清楚我在这里试图实现什么,请看下面的一个小例子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"),
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个源的源转换似乎是最灵活的。枚举后端口存在,但应进行转换。