Java泛型方法入参和出参如何定义?

    public static List<A> getTree(List<B> list) {
        List<A> nodes = new ArrayList<>();
        for (B b : list) {
            A a = new A();
            a.setName(b.getName());
            nodes.add(a);
        }
        // 其他处理...

        return nodes;
    }

入参类型为数组的B
返回结果为数组的A
如何改成泛型方法的写法啊,把类A,类B如何替换?

参考下面 Masource 大佬的回复

public static <R, T> List<T> coverts(List<R> req) {
    try {
        for (R r : req) {
            // 反射获取R类的所有属性和值
            for (Field f : r.getClass().getDeclaredFields()) {
                String name = f.getName();
                name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());
                Method m = r.getClass().getMethod("get"+name);
                System.out.println(name+"----"+m.invoke(r).toString());// name----张三 age----18
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}
阅读 4k
2 个回答
✓ 已被采纳
    public static <A, B> List<A> getTree(List<B> list,Class<A> aClazz) {
        List<A> nodes = new ArrayList<>();
        for (B b : list) {
            //这里很多util包都支持实例化队形,都是通过反射玩的。可以自己换
            A a = cn.hutool.core.bean.BeanUtil.toBean(b, aClazz);
            nodes.add(a);
            //这里如果要其他处理,你就要对泛型加限定符来给与泛型新的属性
            //如<A extends people>,则A就限定了只能是people的子类,那么你就可以给A加新的属性如a.setAge(10);
        }
        return nodes;
    }

方法入参一定有一个clazz来实例化对象的,因为类型擦除了

public static <R, T> List<T> covert(List<R> req) {
    
    return null;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题