在这里使用“对象”代替特定类型有什么问题?

时间:2019-04-09 08:13:09

标签: java generics lambda functional-programming

我写了一些代码来测试Supplier,但出了些问题,但我不知道为什么。
这是代码:


import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Client {
    public static void main(String[] args) {
        List<Integer> list = IntStream.range(1, 11).boxed().collect(Collectors.toList());
        List<User> newList = addToList(list, User::new);
        System.out.println(newList);
    }

    private static <T extends User> List<T> addToList(List<Object> srcList, Supplier<T> sp) {
        if (srcList == null || srcList.isEmpty())
            return null;
        return srcList.stream().map(src -> {
            T t = sp.get();
            t.setAge(Integer.parseInt(src.toString()));
            return t;
        }).collect(Collectors.toList());
    }

    static class User {
        Integer age;

        public Integer getAge() {
            return age;
        }

        void setAge(Integer age) {
            this.age = age;
        }
    }
}

List<User> newList = addToList(list, User::new)此处显示错误:
“方法引用中的返回类型错误:无法将用户转换为T”。
然后将私有方法更改为以下内容:

    private static <T extends User, R> List<T> addToList(List<R> srcList, Supplier<T> sp) {
        if (srcList == null || srcList.isEmpty())
            return null;
        return srcList.stream().map(src -> {
            T t = sp.get();
            t.setAge(Integer.parseInt(src.toString()));
            return t;
        }).collect(Collectors.toList());
    }

,这次没有错误。
这是怎么了每个类都应该是Object的子类,请问为什么我不能在这里使用'Object'?
如果有人帮助我,我将不胜感激。

0 个答案:

没有答案
相关问题