我目前正在开发一个项目(数据库实现),涉及一个名为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.
我不知道是什么导致这个或如何解决它,有谁知道如何解决这个问题,或者我能做些什么?
问题出在这里:
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在循环中进行.
虽然我不得不承认,该错误消息咳咳有些不清楚.
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |