ArrayList创建:(某个对象)不能存储在java.lang.Object []类型的数组中

时间:2011-09-13 09:56:50

标签: java android

通常,代码块工作得很完美。但在极少数情况下,“new ArrayList”会抛出一个Exeption my.namespace.CacheEntry,不能存储在java.lang.Object [] 类型的数组中。

检查谷歌,其他人似乎在带有3.1的Acer A500上获得此例外(这也是我得到它的设备)。在通用Java或其他任何东西中我都没有看到任何打击,所以可能是一些非常非常的Honeycomb特殊情况甚至VM错误?

private long expireCache(HashMap<String, CacheEntry> map) {
    long count = 0;
    // next line will sometimes throw the exception:
    ArrayList<CacheEntry> entries = new ArrayList<CacheEntry>(map.values());
    Collections.sort(entries);

CacheEntry类也非常规则:

final class CacheEntry implements Comparable<CacheEntry> {
    public File file;
    public Long time;

    CacheEntry(File cacheFile) {
        // retreive the lastModified only once, don't do heavy I/O for sorting,
        // keep it desynced from filesystem so nothing bad happens when the 
        // file gets changed while sorting:
        file = cacheFile;
        time = cacheFile.lastModified();
        }

     // "touch" the cached last modified time
     public void touch() {
        time = System.currentTimeMillis();
        }

     // return the long comparable of last modified time
     public int compareTo(CacheEntry c) {
        return time.compareTo(c.time);
        }
     }

我认为这段代码没有任何问题。任何人吗?

1 个答案:

答案 0 :(得分:2)

  

可能是一些非常非常Honeycomb的特殊情况,甚至是VM bug?

是的,看起来像它,因为根据Java语义,不是任何“不能存储在java.lang.Object []类型的数组中的东西” - 除了原语,但是那些不能是HashMap

中的值