java 根据泛型返回对象

发布于 2022-09-07 12:41:41 字数 338 浏览 12 评论 0

我想写一个公共方法,传入两个相同类型对象a、b,如果a是null就返回b

public static ifObj(Object a, Object b) {
    if(null == a) {
        return b;
    }else {
        return a;
    }
}

Obj obj = ifObj(xxx, new xxx());

可是这样做返回结果还要转型,我想ifObj的基础上修改一些,调用方法传一个对象类型或泛型,判断a为null的话,根据类型或泛型泛型new一个对象返回;这样思路可以吗,语法应该怎样写才能实现呢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

韵柒 2022-09-14 12:41:41

@learnmeahaskell 在评论中给了你思路,不过我想再提一点:

ifObj(xxx, new xxx()) 的话,也就是说无论 xxx 是否为空,都会执行 new xxx() 来生成新实例,这样不是很好,会导致无意义的资源开销,可以用个接口来延迟加载。

public interface Supplier<T> {
    T supply();
}

public static <T> T ifObj(T a, Supplier<T> s) {
    return a == null ? s.supply() : a;
}

Obj obj = ifObj(xxx, new Supplier<Obj>() {
    @Override
    public Obj supply() {
        return new xxx();
    }
});

// 如果是 jdk8 那就可以直接使用 `Optional`
Obj obj = Optional.ofNullable(xxx).orElseGet(() -> new xxx());

orElseGet 里其实就是 supplier

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文