作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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 在他提供的链接中所解释的那样。由于有很多这样的类,其中包含非常大的常量列表,我觉得需要一种更好的方法。所以问题是寻找更好的解决方案。
最佳答案
您可以在所有使用枚举的地方使用接口(interface) - 这样您就不必更改 Java 5+ 中的枚举实现。
public interface Type {
String getDesc();
String getType();
}
Java 5+ 中的接口(interface)实现是相同的:
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 中的 Enum 或自定义实现来实现类型(最好是使用一些代码生成器来获取枚举并将其转换为 Java 5 之前的类)
使用代码:
for (Type type: types)
{
if(nodeValue.equalsIgnoreCase(type.getType()))
{
value=type.getDesc();
break;
}
}
其中类型是类型[]。我不知道你是否使用 switch 语句,但循环可以正常工作。
因此,您不必为枚举使用者编写单独的代码,但仍需要将枚举重写为 Enum。
关于java - 实现枚举以实现反向兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707662/
我是一名优秀的程序员,十分优秀!