У меня есть проект, в котором метод isSet календаря был бы очень полезен, но между очисткой поля и чтением флага isSet для этого поля мне нужно вызвать другой метод календаря, на который влияет эта проблема.
Вот пример, чтобы продемонстрировать, что происходит:
Calendar cal = Calendar.getInstance();
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // true
cal.clear(Calendar.SECOND);
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // false
cal.getTimeInMillis();
// These other methods I've tried, and I'm sure many more, have the same affect on isSet:
// before(calendar), compareTo(calendar), get(field), add(field, int), set(field, int)
// Note: 'field' in above comment line refers to a field other than Calendar.SECOND
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // true
Я посмотрел на источник для класса Calendar, и я не вижу причины этого. Кто-нибудь знает, почему это происходит? Нужно ли отслеживать заданные поля отдельно?
Обновление:
Похоже, что эта проблема может быть связана с Android или с конкретной версией Java, так как несколько респондентов заявили, что она работает для них в стандартной Java. Просто чтобы прояснить, класс, который я использую, по-прежнему java.util.Calendar. В случае, если информация может помочь, я строю против платформы Android 2.2 (API 8).
Обновление 2:
По словам кого-то из # android-dev о FreeNode и моих последующих исследований в Википедии, это, вероятно, связано с тем, что Dalvik использует подмножество Harmony (реализация Java) для своей библиотеки классов вместо Java. Однако это заставляет меня задуматься, почему Harmony меняет поведение isSet. Излишне говорить, что эта проблема звучит так, как будто она слишком далеко вверх по течению, чтобы в ближайшее время было исправление в Android SDK, поэтому мне придется согласиться с обходным решением.
Я оставлю вопрос открытым, так как он еще не получил правильного ответа.
Это ошибка в гармонии, как я подозреваю, или намеренный дизайн? Если намеренно, какова цель и есть ли способ использовать это, как я хочу использовать?
Обновление 3:
Я разместил проблему на трекере для Android, чтобы подождать и посмотреть, что из этого получится. Пожалуйста, отметьте это, если эта проблема также является проблемой для вас. Я надеюсь, что у Android есть своя форк Harmony, и ему не нужно ждать исправления вверх по течению.
https://code.google.com/p/android/issues/detail?id=16826
Также удален тег java, поскольку это явно не проблема Java.