1

私を困惑させている問題があります。キーとして文字列を使用し、値として独自の KWIKattribute を使用するように宣言された HashMap があります。

private HashMap<String, KWIKattribute> attributes = new HashMap<String, KWIKattribute>();

sgml_xml_tag は文字列で、kattr は KWIKattribute のインスタンスです。

attributes.put(sgml_xml_tag, kattr);

KWIKattribute として値を取り戻そうとすると、

for (Map.Entry<String, KWIKattribute> e : attributes.entrySet()) {
        String key = e.getKey();
        KWIKattribute kattr = (KWIKattribute) attributes.get(e.getKey());
}

例外がスローされる

javax.faces.el.EvaluationException: java.lang.ClassCastException: java.lang.String cannot be cast to com.northgrum.adt.kwik.model.KWIKattribute

これはおそらくどこかでの単純な愚かなエラーであることはわかっていますが、それが何であるかはわかりません。助言がありますか?

4

2 に答える 2

0

それ以外の

KWIKattribute kattr = (KWIKattribute) attributes.get(e.getKey());

使用する

KWIKattribute kattr = e.getValue();

マップのエントリ セットを繰り返し処理しています。各エントリには、キーと、マップ内のそのキーに関連付けられた値が含まれています。エントリから直接値を取得できます。あなたがやっているように、地図で調べる必要はありません。

とはいえ、このエラーが発生するのは奇妙です。まず第一に、へのキャストKWIKattributeはまったく必要ないはずです。第 2 に、attributesが実際にである場合、オブジェクトが値として格納されていることHashMap<String, KWIKattribute>はあり得ません。String

于 2012-10-23T14:41:36.410 に答える
0

Map.EntryMap のエントリ セットを反復処理するために使用する -class には、現在のキーに値を返すgetValue()-methodがあります。

それ以外の場合、Map の値のみに関心がある場合は、values-collectionを反復処理することもできます。

for (KWIKattribute attr : attributes.values()){
  // Do your work with attr
}
于 2012-10-23T14:41:43.030 に答える