TreeMap을 사용하여 직렬화 가능 객체를 가졌습니다.GWT TreeMap의 Ordering/Comparator Serialize
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 : Type 이 SerializationPolicy 또는 클래스 객체를 직렬화 할 수없는 유형 집합 유형에 'java.lang.String $ CaseInsensitiveComparator'유형이 포함되어 있지 않습니다. 보안을 위해이 유형 직렬화되지 않습니다 :
그래서 내가 만들 예 = [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