我需要在java中以不同的数据类型解析其他集合中的集合内容

时间:2015-02-26 10:29:28

标签: java

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);

2 个答案:

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