Android ArrayList和HashMap问题

时间:2018-02-15 21:29:28

标签: java arraylist hashmap

我最初在Eclipse中编写了一个Android应用程序。从那以后我没有触及过代码。我最近想更新一些东西。我将项目导入Android Studio。我最初有gradle版本问题和类似的东西来处理。

我在Eclipse中完成的代码100%没有错误和警告。现在在Android Studio中,它有各种各样的警告和错误。我清理了95%的警告和一些错误,因为我认为这只是语言的演变,也许是一些弃用的方法。

我有以下代码产生以下错误。

Error:(129, 79) error: incompatible types: ArrayList<HashMap> cannot be converted to List<? extends Map<String,?>>

有人能指出我正确的方向如何简单地将此代码更新为最新且最好的方式吗?我最初是在2010年为Android 2.3编写的,现在正在尝试为Android 4.1编译。

ArrayList<HashMap> list = new ArrayList<HashMap>();

HashMap<String, String> items = new HashMap<String, String>();
items.put("Apple", "Red");
items.put("Orange", "Orange");
items.put("Banana", "Yellow");
items.put("Pear", "Green");
items.put("Grape", "Purple");
list.add(items);

SimpleAdapter sa = new SimpleAdapter(this, (List<? extends Map<String, ?>>) list, R.layout.list_fruit, new String[] {"Apple", "Orange", "Banana", "Pear", "Grape"}, new int[] {R.id.listApple, R.id.listOrange, R.id.listBanana, R.id.listPear, R.id.listGrape}) {};

1 个答案:

答案 0 :(得分:0)

看一下这个答案:Java generics in List return type on a method inherited from multiple interfaces

它有一些关于为什么不起作用的细节,但基本上,如果你在列表中放置一个Map-but-a-HashMap,那么你的ArrayList的另一个消费者就会爆炸,这就是{{1}允许。

尝试将您的列表声明为List<? extends Map<String, ?>>。您通常应该避免将变量声明为实现(ArrayList,HashMap等)并坚持使用接口(List,Map等等),这样您就不会与特定的实现耦合。