IDE抱怨:“错误的第二个参数类型:找到布尔值,必需:?”
public void onItemClick(View view, int positon) {
HashMap<String, ?> movie = (HashMap<String, ?>) movieData.getItem(positon);
if(view.getId() == R.id.checkBox) {
boolean selection = (boolean) movie.get("selection") ? false : true;
// Error here
movie.put("selection", selection);
}
}
然而,这个会起作用
public void onItemClick(View view, int positon) {
HashMap movie = movieData.getItem(positon);
if(view.getId() == R.id.checkBox) {
boolean selection = (boolean) movie.get("selection") ? false : true;
movie.put("selection", selection);
}
}
答案 0 :(得分:2)
在Unbounded Wildcards的Java教程页面中,它声明:
值得注意的是,
List<Object>
和List<?>
并不相同。您可以在Object
中插入Object
或List<Object>
的任何子类型。但您只能将null
插入List<?>
。 Guidelines for Wildcard Use部分提供了有关如何确定在给定情况下应使用哪种通配符(如果有)的更多信息。
您应该考虑在这里使用通配符的原因。如果可能,请不要使用通配符。如果您仍然需要使用一个,请使用适当的Upper Bounded Wildcard以便知道该类型。
由于您在其他数据类型中存储了Boolean
,因此唯一的共同父级是Object
:
HashMap<String, Object> movie;
答案 1 :(得分:0)
将该行替换为:
HashMap<String, Boolean> movie = (HashMap<String, Boolean>)
在泛型中,如果你使用&#39;?&#39;通配符,它的类型称为未知类型,这意味着您不能将布尔值设置为未知类型。希望它对你有用。
对于泛型中的通配符,这里非常好link,我建议你阅读一次。
答案 2 :(得分:0)
generic不接受原始类型。它接受Only Object.so你应该使用Map<String,Boolean> mp = new HashMap<String,Boolean>();