You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中是否存在类似Kotlin also或apply的构造,可操作对象后返回该对象?

Java中是否存在类似Kotlin also或apply的构造,可操作对象后返回该对象?

嘿,这个问题问到点子上了!咱们先梳理下你的场景:你写的ok2方法是先创建A实例,调用它的fun方法(返回int),再把A实例返回;而nok里想写成链式调用,但因为fun返回的是int,没法直接作为A类型返回,你希望能让编译器自动处理成ok2的逻辑,对吧?

Java本身并没有像Kotlin的also或apply那样内置的语法糖,但咱们可以自己实现类似的效果,有两种常见方式:

1. 写一个通用工具类

你可以创建一个工具类,提供一个通用的also方法,接收对象和一个消费型lambda,执行完lambda里的操作后返回原对象:

import java.util.function.Consumer;

public class ObjectUtils {
    public static <T> T also(T obj, Consumer<T> action) {
        action.accept(obj);
        return obj;
    }
}

这样你的nok方法就可以改成:

A nok() {
    return ObjectUtils.also(new A(), A::fun);
}

这段代码的逻辑和ok2完全一致:先创建A实例,调用它的fun方法,最后返回这个A实例,完美解决了返回类型不匹配的问题。

2. 给类A添加专属的also方法

如果你有权限修改A类的代码,可以直接在类里加一个类似的方法:

import java.util.function.Consumer;

class A {
    public A() {}
    
    public int fun() {
        return 0;
    }
    
    // 新增的also方法
    public A also(Consumer<A> action) {
        action.accept(this);
        return this;
    }
}

调用起来就更简洁了:

A nok() {
    return new A().also(A::fun);
}

顺便说一句,这种方式本质上就是模拟Kotlinalso的行为——不管你在lambda里调用的方法返回什么,最终都会把原对象返回。如果是第三方类没法修改的话,第一种工具类的方式就更灵活啦。

备注:内容来源于stack exchange,提问作者chris01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:09:52