我有一个项目日历的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:
根据FaleNood上的Android Android开发人员和我对维基百科的后续研究,这可能是因为Dalvik使用了一个和谐的子集(Java实现)来代替类库而不是Java。然而,这让我想知道为什么和谐会改变ISSET的行为。不必说,这个问题听起来太上游了,android sdk很快就无法修复了,所以我需要解决这个问题。
既然这个问题还没有得到正确的回答,我就不提了。
它是我怀疑的和谐的bug还是有意设计的bug?如果是有意的,目的是什么?有没有办法像我想用的那样使用它?
更新3:
我已经把这个问题发布到了android问题跟踪器上,现在等着看是否有什么事情发生。如果这个问题对你来说也是个问题,请把它标出来。我希望android有自己的和谐之叉,不需要等待上游的修复。
https://code.google.com/p/android/issues/detail?id=16826
还删除了Java标记,因为这显然不是Java问题。

最佳答案

按预期工作for me

10-07 19:09
查看更多