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

ArrayList创建:(某些对象)不能存储在java.lang.object[]类型的数组中,java,android,Java,Android,通常,代码块工作得很完美。但在极少数情况下,“new ArrayList”抛出一个Exeptionmy.namespace.CacheEntry不能存储在java.lang.Object[]类型的数组中 查看谷歌,其他人似乎在Acer A500和3.1(这也是我得到的设备)上得到了这个例外。我看不到通用Java或其他任何东西对此有任何影响,所以可能是一些非常特殊的情况,甚至是一个VM错误 private long expireCache(HashMap<String, CacheEntry

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

查看谷歌,其他人似乎在Acer A500和3.1(这也是我得到的设备)上得到了这个例外。我看不到通用Java或其他任何东西对此有任何影响,所以可能是一些非常特殊的情况,甚至是一个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);
private长过期缓存(HashMap){
长计数=0;
//下一行有时会抛出异常:
ArrayList条目=新的ArrayList(map.values());
集合。排序(条目);
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);
        }
     }
final类CacheEntry实现了可比较的{
公共文件;
公众参与时间长;
CacheEntry(文件cacheFile){
//仅检索上次修改的文件一次,不要进行繁重的I/O排序,
//保持它与文件系统的同步,这样当
//排序时文件被更改:
file=cacheFile;
time=cacheFile.lastModified();
}
//“触摸”缓存的上次修改时间
公众接触{
时间=System.currentTimeMillis();
}
//返回上次修改时间的长时间比较值
公共整数比较(缓存条目c){
返回时间。比较(c时间);
}
}
我看不出这个代码有什么问题,有人吗

可能是一些非常特殊的情况,甚至是一个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);

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

中的值,在哪里以及如何调用expireCache?请举例说明。您的代码似乎正确,它看起来确实像一个蜂窝状错误。@Alexandr,我认为这完全不关这个问题,何时以及如何调用这个函数。但如果您确实需要知道,它会被调用当缓存大小或映射中的元素数超过上限时,从同步(cacheentry hashmap)项内部(因为对hashmap的所有更改都在内部同步)。