Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该把<&燃气轮机;对于泛型类型?_Java - Fatal编程技术网

Java 我应该把<&燃气轮机;对于泛型类型?

Java 我应该把<&燃气轮机;对于泛型类型?,java,Java,考虑一下这个被剪掉的代码: public class MaxSizeHandler extends AbstractValueHandler<Collection> { } 公共类MaxSizeHandler扩展了AbstractValueHandler{ } 我使用eclipse,它警告我为集合添加推断泛型参数类型,代码更改如下: public class MaxSizeHandler extends AbstractValueHandler<Collecti

考虑一下这个被剪掉的代码:

public class MaxSizeHandler extends AbstractValueHandler<Collection> {      
}
公共类MaxSizeHandler扩展了AbstractValueHandler{
}
我使用eclipse,它警告我为集合添加推断泛型参数类型,代码更改如下:

public class MaxSizeHandler extends AbstractValueHandler<Collection<?>> {       
}

公共类MaxSizeHandler扩展了AbstractValueHandler添加正确的类型将允许类返回正确类型的值,您的
集合
是否有特定类型的对象,即
整数
,然后使用
AbstractValueHandler

添加正确的类型将允许类返回正确类型的值,您的
集合
是否有特定类型的对象,即
整数
,然后使用
AbstractValueHandler

传递原始
集合
将意味着
集合
未参数化,因此您失去了(即在编译时)强键入
集合
中内容的能力

传递
集合
并没有实质性的不同,因为通配符将匹配任何扩展
对象

当然,它将删除警告


最好的方法是传递
集合
集合

传递原始
集合
将意味着
集合
未参数化,因此您失去了强烈键入
集合
中内容的能力(即在编译时)

传递
集合
并没有实质性的不同,因为通配符将匹配任何扩展
对象

当然,它将删除警告


最好的方法是传递
集合
集合您需要在集合类型之前以通用格式提及集合类型,如下所示:

public class MaxSizeHandler extends AbstractValueHandler<Collection<? extends T>> {      
}

公共类MaxSizeHandler扩展了AbstractValueHandler您需要在其前面提到集合类型,格式如下:

public class MaxSizeHandler extends AbstractValueHandler<Collection<? extends T>> {      
}

public类MaxSizeHandler扩展了AbstractValueHandler,这取决于您如何使用
MaxSizeHandler
类,使此类本身具有泛型可能是有意义的。例如,如果需要迭代集合:

public class MaxSizeHandler<T>
       extends AbstractValueHandler<Collection<? extends T>> {
  public void handle(Collection<? extends T> coll) {
    for(T item : coll) {
      // ...
    }
  }
}
public class MaxSizeHandler<T>
       extends AbstractValueHandler<Collection<? super T>> {
  public void handle(Collection<? super T> coll) {
    T item = createAnItem();
    coll.add(item);
  }
}
公共类MaxSizeHandler

扩展AbstractValueHandler,这取决于您如何使用
MaxSizeHandler
类,使该类本身具有泛型可能是有意义的。例如,如果需要迭代集合:

public class MaxSizeHandler<T>
       extends AbstractValueHandler<Collection<? extends T>> {
  public void handle(Collection<? extends T> coll) {
    for(T item : coll) {
      // ...
    }
  }
}
public class MaxSizeHandler<T>
       extends AbstractValueHandler<Collection<? super T>> {
  public void handle(Collection<? super T> coll) {
    T item = createAnItem();
    coll.add(item);
  }
}
公共类MaxSizeHandler

扩展AbstractValueHandlerEclipse正在询问-“什么的集合?”Eclipse正在询问-“什么的集合?”伟大的答案。较小的编译时好处,使Eclipse关闭的主要好处。=)@corsiKa另一种关闭eclipse的方法是不使用eclipse;)如果您想向集合中添加项,则通配符会产生很大的影响。回答得很好。较小的编译时好处,使Eclipse关闭的主要好处。=)@corsiKa另一种关闭eclipse的方法是不使用eclipse;)如果要向集合中添加项,则通配符会产生很大的差异。