在java 1.8中运行的应用程序必须在java 1.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在他提供的链接中所解释的那样。由于有这么多类,其中包含非常大的常量列表,我觉得需要更好的方法。所以问题是寻找更好的解决方案。
答案 0 :(得分:1)
您可以在使用枚举的所有位置使用接口 - 这样您就不必在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+中的接口实现是相同的:
for (Type type: types)
{
if(nodeValue.equalsIgnoreCase(type.getType()))
{
value=type.getDesc();
break;
}
}
在Java 5-中,您必须使用来自apache-commons的Enum或自定义实现来实现Type(最好的方法是使一些代码生成器获取枚举并将其转换为Java 5之前的类)
消费代码:
index.php?route=product/product&path=20_27&product_id=41
其中类型是Type []。 我不知道你是否使用switch语句,但循环可以正常工作。
因此,您不必为枚举消费者提供单独的代码,但仍需要将枚举重写为Enum。