2

私は現在、と呼ばElementTypeれる内部列挙型で呼び出される列挙型クラスを含むプロジェクト(データベース実装)に取り組んでいますTypeType。内部ElementTypeには、HashMap<TypeType, ArrayList<ElementType>>すべてのElementType'を対応するTypeType値にマッピングしています。

の値TypeType

[TEXT, NUMERIC_EXACT, NUMERIC_APPROX, OTHER]

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);});
}

eTypeforループ内のすべての言及は、Eclipse内で赤の下線が引かれています。

最初のものはエラーを出しますeType cannot be resolved

2番目のものはを与えeType cannot be resolved to a variableます。

そして3番目のもの(の内側ArrayList)はを与えSyntax error on token "eType", VariableDeclaratorId expected after this tokenます。

このgetTYPE()メソッドはプライベートであり、各ElementTypeのTypeTypeを返します。上記typeMappingのHashMapです。

何が原因なのか、どのように修正するのかわかりません。誰かがこれを修正する方法、または私に何ができるのかを知っていますか?

4

2 に答える 2

5

問題はここにあります:

typeMapping.put(t, new ArrayList<ElementType>() {add(eType);});
                                                ^^^^^^^^^^^^^  

ArrayList静的初期化ブロック内から派生した内部の非静的クラスを作成しようとしました。new ArrayListそれを普通のプラスに置き換えるとうまくいきますalist.add(eType)

または、次を使用できます。

typeMapping.put(t, new ArrayList<ElementType>() {{add(eType);}});

注 1:開き括弧と閉じ括弧が2 つ必要です。したがって、「二重ブレースの初期化」の終点です。

eType final注 2: DBI の場合、ループ内で作成する必要があります。

認めざるを得ませんが、エラー メッセージがやや不明瞭です

于 2012-08-05T13:48:29.707 に答える
4

これは、私のマッチング「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);
    }
}

それはあなたのために働きますか?

于 2012-08-05T13:43:46.570 に答える