【发布时间】:2016-09-06 07:45:32
【问题描述】:
我用android.support.v4.util.ArrayMap
喜欢这个
ArrayMap<String, ArrayList<Object>> group = new ArrayMap<>();
但我打电话给ArrayMap.put(key,value)
在allocArrays(final int size) 方法中抛出ClassCastException。
private void allocArrays(final int size) {
if (size == (BASE_SIZE*2)) {
synchronized (ArrayMap.class) {
if (mTwiceBaseCache != null) {
final Object[] array = mTwiceBaseCache;
mArray = array;
mTwiceBaseCache = (Object[])array[0];
mHashes = (int[])array[1];
array[0] = array[1] = null;
mTwiceBaseCacheSize--;
if (DEBUG) Log.d(TAG, "Retrieving 2x cache " + mHashes
+ " now have " + mTwiceBaseCacheSize + " entries");
return;
}
}
} else if (size == BASE_SIZE) {
synchronized (ArrayMap.class) {
if (mBaseCache != null) {
final Object[] array = mBaseCache;
mArray = array;
mBaseCache = (Object[])array[0];
mHashes = (int[])array[1];
array[0] = array[1] = null;
mBaseCacheSize--;
if (DEBUG) Log.d(TAG, "Retrieving 1x cache " + mHashes
+ " now have " + mBaseCacheSize + " entries");
return;
}
}
}
mHashes = new int[size];
mArray = new Object[size<<1];
}
应用程序在此行崩溃mBaseCache = (Object[])array[0];
非常感谢!!!
【问题讨论】:
-
抛出 java.lang.ClassCastException: java.lang.String 不能转换为 java.lang.Object[]
-
你的代码太乱了。
-
mBaseCache 是一个对象还是一个对象数组?
-
该错误与ArrayMap无关。 mBaseCache 和数组都是 Object[]。您正在尝试将恰好是 String 的单个 Object 转换为 Object[]
-
mBaseCache 是 ArrayMap 缓存 Array is object[] type @AhlemJarrar