我可以将List <model>传递给采用通用通配符List <! - ? - >的函数

时间:2016-03-10 07:43:18

标签: java android generics

我有一个列表视图适配器,可以在某些活动中重用,并根据不同的组项呈现不同的布局。由于列表视图适配器需要灵活的集合结构,我决定使用泛型通配符进行集合:

ToServerTime()

这是问题所在。我有一个函数返回适配器的两级关联数组。它返回public ExpandableListAdapter(FragmentActivity context, List<String> group, Map<String, List<?>> listCollection) { this.context = context; this.dataCollections = listCollection; } 。模型是一种映射模型。

Map<String, List<Model>>

我了解来自public Map<String, List<Model>> getAll() { Map<String, List<Model>> listCollection = new HashMap<String,List<Model>>(); /***Database Query***/ List<Model> rowList = new ArrayList<Model>(); try { if (cursor.moveToFirst()) { do { Model sf = new Model(); sf.title = cursor.getString(cursor.getColumnIndex("title"); sf.group_title = DBMethod.getString(cursor,getColumnIndex("group")); rowList.add(sf); Model group = (Model)listCollection.get(sf.group_title); if(group == null){ listCollection.put(sf.group_title,rowList); }else{ listCollection.get(sf.group_title).add(sf); } } while(cursor.moveToNext()); } } catch (Exception e) { Log.d(TAG, "Error while trying to get posts from database"); } finally { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } return listCollection; } public class Model{ public String title; public String value; public String group_title; } getAll())的返回数组与Map<String, List<Model>>ExpandableListAdapter)所需的通配符集合不匹配。但它是否仍然可以将其传递到适配器?我在这段代码中遇到不兼容的类型错误:

Map<String, List<?>>

我尝试修改Map<String, List<Model>> listCollection = getAll(); ExpandableListView expListView = (ExpandableListView) findViewById(R.id.left_drawer); final ExpandableListAdapter expListAdapter = new ExpandableListAdapter( this, groupList, listenCollection); ^^^^^^^^^^^ expListView.setAdapter(expListAdapter); 以返回getAll(),但仍然遇到不兼容的类型错误。

1 个答案:

答案 0 :(得分:2)

当您将listCollection声明为Map<String, List<?>>时,您声明地图的值类型必须完全 List<?>。那里的通配符实际上并没有带给你太多。要获得所需的类型灵活性,您需要一个额外的通配符:Map<String, ? extends List<?>>

请注意,使用此通配符,您可以从地图中检索列表,但不能向其中添加列表。