java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.Object[]

java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.Object[],java,android,Java,Android,在我的android项目中,我想创建一个泛型类来存储SharedReferences中所有类型的实体,但给出了错误: java.lang.ClassCastException:java.util.ArrayList不能强制转换为java.lang.Object[] 这是我的密码: public ArrayList<E> getItems(Context context) { android.content.SharedPreferences settings;

在我的android项目中,我想创建一个泛型类来存储SharedReferences中所有类型的实体,但给出了错误:

java.lang.ClassCastException:java.util.ArrayList不能强制转换为java.lang.Object[]

这是我的密码:

public ArrayList<E> getItems(Context context) {
        android.content.SharedPreferences settings;
        List<E> objects ;
        settings = context.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);

        if (settings.contains(ITEM_NAME)) {
            String json = settings.getString(ITEM_NAME, null);
            GsonBuilder gson = new GsonBuilder();
            Type collectionType = new TypeToken<List<E>>(){}.getType();

            E[] items = gson.create().fromJson(json,
                    collectionType);  // in this line occurs error


            objects = new ArrayList<E>(Arrays.asList(items));
        } else
            return null;

        return (ArrayList<E>) objects;
    }
public ArrayList getItems(上下文){
android.content.SharedReferences设置;
列出对象;
设置=context.getSharedReferences(首选名称,
上下文。模式(私人);
if(设置.包含(项目名称)){
String json=settings.getString(项名称,空);
GsonBuilder gson=新的GsonBuilder();
Type collectionType=new-TypeToken(){}.getType();
E[]items=gson.create().fromJson(json,
collectionType);//此行发生错误
objects=newarraylist(Arrays.asList(items));
}否则
返回null;
返回(ArrayList)对象;
}
试试:

List items=gson.create().fromJson(json,collectionType);

该异常抱怨您有一个ArrayList对象(它是从
fromJson()
返回的),但您试图将它强制转换为一个数组,并将该赋值赋给
E[]items

,错误说明了一切。您正试图将
ArrayList[]
强制转换为
对象[]
。换句话说,您已经有了
ArrayList
,这是您可以从Javadoc中发现的,并且或多或少与您在指定
collectionType
时要求的一样。不需要再创建一个。
List<E> items = gson.create().fromJson(json, collectionType);