私はTreeMapを持つシリアライズ可能なオブジェクトを持っています。GWT TreeMapのOrdering/Comparatorをシリアライズ
Map<String, Dogs> dogsByNames = Maps.newTreeMap(); // guava style
これまでのところ、すべて問題ありません。 は、今では、キーの大文字と小文字を無視するnessassaryです:
Map<String, Dogs> dogsByNames = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
String.CASE_INSENSITIVE_ORDERがserialzableではないので、これは動作しません:
com.google.gwt.user.client.rpc。 SerializationException:タイプ 'java.lang.String $ CaseInsensitiveComparator'は、このSerializationPolicyまたは のClassオブジェクトをロードできなかった タイプのセットに含まれていませんでした。セキュリティ上の目的のために、このタイプ がシリアライズされません。:インスタンス= [email protected]
だから私は自分のものを作成します。
private static abstract class MyComparator<T>
implements
Comparator<T>, // extends Ordering<T> do not work
IsSerializable { // Serializable do not work
}
public static final MyComparator<String> CASE_INSENSITIVE_ORDER = new MyComparator<String>() {
@Override
public int compare(final String left, final String right) {
if (null == left) {
return (null == right) ? 0 : -1;
} else if (null == right) {
return 1;
}
return left.compareToIgnoreCase(right);
}
};
しかし、これはまだありません作業。
何が間違っていますか?
ソリューション:
protected static class MyOrdering // no-private!!!
extends
Ordering<String>
implements
IsSerializable {
@Override
public int compare(final String left, final String right) {
if (null == left) {
return (null == right) ? 0 : -1;
} else if (null == right) {
return 1;
}
return left.compareToIgnoreCase(right);
}
}
public static final Ordering<String> CASE_INSENSITIVE_ORDER = new MyOrdering();
docs 'CASE_INSENSITIVE_ORDER' **は** serializableです:_A compareToIgnoreCaseのようにStringオブジェクトを順序付けするComparatorです。このコンパレータはシリアル化可能です。 – Xaerxess
実際はそうではありません。 (@see編集) –
@ eneveuの答えが役に立つかもしれません。 – Xaerxess