public static <T extends Collection<? extends Object>,E extends Collection<? super Number>> void parseCollection(T src, E dest, Class<?> clazz){
for (Object obj : src) {
if(clazz.equals(Long.class)){
dest.add(Long.valueOf(obj.toString()));
}else if(clazz.equals(Integer.class)){
dest.add(Integer.valueOf(obj.toString()));
}
}
}
当我将Set<String>
称为src并将List<Long>
称为dest时,将此函数称为
它显示编译时异常,说明:&#34; 绑定不匹配:GenericMethods类型的泛型方法parseCollection(T,E,Class)不适用于参数(Set,List,Class)。推断类型List不是有界参数&gt; &#34;
函数被称为这样:
Set<String> src = new HashSet<String>();
src.add("1");
src.add("2");
src.add("3");
src.add("4");
List<Long> dest = new ArrayList<Long>();
parseCollection(src, dest, Long.class);// exception
System.out.println(dest);
答案 0 :(得分:1)
尝试重写您的转换方法,如下所示:
public static <E extends Number> void parseCollection(Collection<?> src, Collection<E> dest, Class<E> clazz){
for (Object obj : src) {
if(clazz.equals(Long.class)){
dest.add((E) Long.valueOf(obj.toString()));
}else if(clazz.equals(Integer.class)){
dest.add((E) Integer.valueOf(obj.toString()));
}
}
}
答案 1 :(得分:0)
您的方法是正确的,但参数错误。你有定义,但在调用方法时很长。试试这个:
&GT;
public static void main(String[] args) {
Set<String> src = new HashSet<String>();
src.add("1");
src.add("2");
src.add("3");
src.add("4");
List<Number> dest = new ArrayList<Number>();
parseCollection(src, dest, Long.class);// exception
System.out.println(dest);
}