Java通用List参数不可能?

时间:2010-11-12 10:45:56

标签: java generics

我有一个简单的方法,它采用通用的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);

            }
        };
    }

2 个答案:

答案 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}}