代码之家  ›  专栏  ›  技术社区  ›  Jono

Java泛型列表参数不可能?

  •  5
  • Jono  · 技术社区  · 14 年前

    我有一个简单的方法,它接受一个通用的列表参数,但是由于某种原因,我的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 回复  |  直到 14 年前
        1
  •  17
  •   Riduidel    14 年前

    在这种情况下,T参数必须在某处定义。我猜你的类没有声明这个参数,你必须把它放在你的方法声明中,比如

    private <T> OnClickListener removeFieldListener(final LinearLayout layout,
            List<T> viewList) {
    

    但这只会把问题转移到这个方法的调用方。。。

        2
  •  12
  •   Community Tales Farias    7 年前

    Riduidel是对的,问题是你没有声明 T 任何地方。

    根据您希望对列表内容执行的操作,您可以只使用通配符。 List<?> viewList 如果你只是拉动 Object 不在;或 List<? extends IListener> 会让你从中解脱出来,等等。

    一般来说,如果泛型参数只在方法中出现一次,则不需要它,而应该使用通配符。如果它 多次出现,例如,从列表中删除内容并将其分配给类型为的变量 T型 ,则确实需要通配符,并且应该参数化方法 as Riduidel suggests .