枚举中的错误与静态初始化程序

Unh*_*igg 2 java enums

我目前正在开发一个项目(数据库实现),涉及一个名为ElementType内部枚举的枚举类TypeType.在里面ElementType有一个HashMap<TypeType, ArrayList<ElementType>>映射所有的ElementType相应的TypeType值.

TypeType

[TEXT, NUMERIC_EXACT, NUMERIC_APPROX, OTHER]
Run Code Online (Sandbox Code Playgroud)

ElementType(和它们对应的TypeType)的值是

[CHARACTER(TEXT), CHAR(TEXT), DECIMAL(NUMBER_EXACT), DEC(NUMBER_EXACT), NUMERIC(NUMERIC_EXACT), INTEGER(NUMERIC_EXACT), INT(NUMERIC_EXACT), SMALLINT(NUMERIC_EXACT), FLAT(NUMERIC_APPROX), REAL(NUMERIC_EXACT), DOUBLE_PRECISION(NUMERIC_APPROX), DOUBLE(NUMERIC_APPROX), DATE(OTHER), TIME(OTHER), VARCHAR(OTHER), LONG_VARCHAR(OTHER)]

在一个static {}地区,我有这个代码:

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);});
}
Run Code Online (Sandbox Code Playgroud)

eType在for循环中的所有提及都在Eclipse中用下划线标记为红色.

第一个给出了错误eType cannot be resolved.

第二个给出eType cannot be resolved to a variable.

而第三个(在里面ArrayList)给出了Syntax error on token "eType", VariableDeclaratorId expected after this token.

getTYPE()方法是私有的,并返回每个ElementType的TypeType.这typeMapping是上面提到的HashMap.

我不知道是什么导致这个或如何解决它,有谁知道如何解决这个问题,或者我能做些什么?

A.H*_*.H. 5

问题出在这里:

typeMapping.put(t, new ArrayList<ElementType>() {add(eType);});
                                                ^^^^^^^^^^^^^  
Run Code Online (Sandbox Code Playgroud)

您尝试创建从ArrayList静态初始化程序块内部派生的内部非静态类.如果用普通new ArrayList加号替换alist.add(eType)它,它将起作用.

或者您可以使用:

typeMapping.put(t, new ArrayList<ElementType>() {{add(eType);}});
Run Code Online (Sandbox Code Playgroud)

注1:必须有两个开合支架.因此终点"双支撑初始化".

注2:对于DBI,您必须eType final在循环中进行.

虽然我不得不承认,该错误消息咳咳有些不清楚.

  • 如果选择第二种方式,还需要将`eType`声明转换为final. (2认同)