問題:
マップのキーと値の Java タイプを見つけようとしていますが、マップを反復処理してから を使用する必要がなくinstanceof
、マップが空であってもそれを知りたいです。
ここ (http://ckeditor.com/download) からダウンロードできる
context:
は、マップを使用して実装されます。
CKEditorConfig
ただし、セッター メソッドが提供されておらず、コンストラクター インジェクションを使用して設定するためのコンストラクターが提供されていないため、インジェクションを使用してこのマップを設定することはできません。ただし、5 つの addConfigValue メソッド (以下を参照) があり、これらの値を追加するために使用できます。
public void addConfigValue(final String key, final Number value);
public void addConfigValue(final String key, final String value);
public void addConfigValue(final String key, final Boolean value);
public void addConfigValue(final String key, final Map<String, ? extends Object> value);
public void addConfigValue(final String key, final List<? extends Object> value);
j2ee/Java Web アプリのいくつかの場所で ckeditor を使用するので、エディターを初期化するために必要な設定を名前で返すファクトリー クラスを作成する必要があると考えました。しかし、これらの構成を外部化して、Spring コンテキスト ファイルに設定したかったのです。そのため、構成オブジェクトを作成できないため、通常のマップを使用してから、マップを使用して構成オブジェクトを構築する必要があります。しかし、オブジェクトを構築する前に、春から来るこれらのマップを検証する必要があります。
これは、構成オブジェクトを構築するための私の方法です:
@SuppressWarnings("unchecked")
public CKEditorConfig buildConfigFromMap(Map<String, Object> configMap) {
CKEditorConfig config = new CKEditorConfig();
for (String key : configMap.keySet()) {
Object val = configMap.get(key);
if (val instanceof Number)
config.addConfigValue(key, (Number) val);
else if (val instanceof String)
config.addConfigValue(key, (String) val);
else if (val instanceof Boolean)
config.addConfigValue(key, (Boolean) val);
else if (val instanceof List) {
config.addConfigValue(key, (List<Object>) val);
} else if (val instanceof Map) {
// TODO
}
throw new IllegalArgumentException("invalid map value types");
}
return config;
}
オブジェクトがマップであることがわかるように、そのキーが文字列であるかどうかを検証できる必要があります。私はこのようなことができることを知っています:
} else if (val instanceof Map) {
for (Object mapKey : ((Map<Object, Object>) val).keySet()) {
if (!(mapKey instanceof String))
throw new IllegalArgumentException("invalid map value types");
}
config.addConfigValue(key, (Map<String, Object>) val);
}
しかし、エクササイズ全体を通して、私は正しいことをしていないと思いますか? 助言がありますか?私はまったく異なるアプローチを使用することにオープンです。ご意見をお待ちしております。