Java 使用静态初始值设定项的枚举中出错

Java 使用静态初始值设定项的枚举中出错,java,enums,Java,Enums,我目前正在从事一个项目(数据库实现),该项目涉及一个名为ElementType的枚举类和一个名为TypeType的内部枚举。在ElementType内部有一个HashMap将所有ElementType映射到它们相应的TypeType值 TypeType的值为 [TEXT, NUMERIC_EXACT, NUMERIC_APPROX, OTHER] ElementType(及其对应的TypeType)的值为 [字符(文本), 字符(文本), 十进制(精确数字), 十二月(确切数字), 数字(数字

我目前正在从事一个项目(数据库实现),该项目涉及一个名为
ElementType
的枚举类和一个名为
TypeType
的内部枚举。在
ElementType
内部有一个
HashMap
将所有
ElementType
映射到它们相应的
TypeType

TypeType
的值为

[TEXT, NUMERIC_EXACT, NUMERIC_APPROX, OTHER]
ElementType
(及其对应的
TypeType
)的值为

[字符(文本),
字符(文本),
十进制(精确数字),
十二月(确切数字),
数字(数字精确),
整数(数值_精确),
INT(数字精确),
SMALLINT(数字精确),
平面(数值约为),
实数(数字精确),
双精度(数值近似值),
双精度(数值_近似值),
日期(其他),
时间(其他),
瓦查尔(其他),
LONG_VARCHAR(其他)]

静态{}
区域中,我有以下代码:

for(ElementType eType : values()) {
    TypeType t = eType.getTYPE();
    if(typeMapping.get(t) != null)
        typeMapping.get(t).add(eType);
    else
        typeMapping.put(t, new ArrayList<ElementType>() {add(eType);});
}
(ElementType eType:values())的
{
TypeType t=eType.getTYPE();
if(typeMapping.get(t)!=null)
typeMapping.get(t).add(eType);
其他的
put(t,newarraylist(){add(eType);});
}
for循环中提到的所有
eType
在Eclipse中都用红色下划线标出

第一个给出了错误
无法解析eType

第二个问题给出了
无法解析为变量的eType

第三个(在
ArrayList
中)给出了标记“eType”上的
语法错误,该标记后面应该是variabledclaratorid

getTYPE()
方法是私有的,它返回每个ElementType的类型。
typeMapping
就是上面提到的HashMap


我不知道是什么原因造成的,也不知道如何修复,有人知道如何修复,或者我能做什么吗?

下面是一个在我的机器“Java HotSpot 1.6.0_21”上编译并运行的示例:

import java.util.*;

public enum ElementType {

    CHARACTER(TypeType.TEXT), CHAR(TypeType.TEXT), DEC(TypeType.NUMERIC_EXACT);

    public static enum TypeType {
        TEXT, NUMERIC_EXACT;
    }

    private TypeType type;

    private ElementType(TypeType type) {
        this.type = type;
    }

    private static Map<TypeType, List<ElementType>> typeMapping;

    static {
        typeMapping = new HashMap<TypeType, List<ElementType>>();
        for (ElementType eType : values()) {
            TypeType t = eType.type;
            if (!typeMapping.containsKey(t)) {
                typeMapping.put(t, new ArrayList<ElementType>());
            }
            typeMapping.get(t).add(eType);
        }

    }

    public static void main(String[] args) {
        System.out.println(typeMapping);
    }
}
import java.util.*;
公共枚举元素类型{
字符(TypeType.TEXT)、字符(TypeType.TEXT)、DEC(TypeType.NUMERIC_-EXACT);
公共静态枚举类型{
文本,数字或精确;
}
私有类型;
私有元素类型(类型){
this.type=type;
}
私有静态映射类型映射;
静止的{
typeMapping=newhashmap();
对于(ElementType eType:values()){
TypeType t=eType.type;
如果(!typeMapping.containsKey(t)){
put(t,newarraylist());
}
typeMapping.get(t).add(eType);
}
}
公共静态void main(字符串[]args){
System.out.println(类型映射);
}
}
它对你有用吗?

问题在于:

typeMapping.put(t, new ArrayList<ElementType>() {add(eType);});
                                                ^^^^^^^^^^^^^  
注1:必须有两个打开和关闭支架。于是就到了终点站

注2:对于DBI,必须在循环中设置
eType
final


尽管我不得不承认,错误消息有点不清楚。

“在静态{}区域”:你是说在ElementType enum的静态初始化器中吗?下次:请不要为可以显示5行代码的东西写诗。代码,我们可以立即剪切并粘贴到您的IDE中使用。请参阅。如果选择了第二种方式,则有必要将
eType
声明转换为final。谢谢,这修复了它,我得到的前两个错误我猜只是eclipse中的一个小故障。
typeMapping.put(t, new ArrayList<ElementType>() {{add(eType);}});