我有一个简单的方法,它采用通用的List参数但由于某种原因我的IDE(Eclipse)说明它是如何解决的?
我在这里做错了什么
private OnClickListener removeFieldListener(final LinearLayout layout,
List<T> viewList) {
return new OnClickListener() {
@Override
public void onClick(View v) {
int indexToDelete = layout.indexOfChild(v);
}
};
}
答案 0 :(得分:15)
在这种情况下,必须在某处定义T参数。因为我猜你的类没有声明这个参数,你必须把它放在方法声明中,比如
private <T> OnClickListener removeFieldListener(final LinearLayout layout,
List<T> viewList) {
但这只会将问题转移给此方法的调用者......
答案 1 :(得分:12)
Riduidel是对的,问题是你没有在任何地方声明T
。
根据您对列表内容的处理方式,您可以使用通配符。如果您只是将List<?> viewList
拉出来,Object
会有效;或List<? extends IListener>
将允许你从中获取IListeners等。
通常,如果只在方法中出现一次,则不需要通用参数,而应使用通配符。如果 多次出现,例如你从列表中删除东西并将它们分配给T
类型的变量,那么你确实需要通配符,你应该参数化你的方法{{ 3}}