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

如何在使用ContentValues类时实现put方法的链式调用?

实现ContentValues链式调用的方法

首先明确:原生Android的ContentValues类的put()方法返回值是void,所以直接写new ContentValues().put(...).put(...)是行不通的。但我们可以通过自定义子类或者包装类来实现这个需求。

方法一:自定义子类继承ContentValues

创建一个继承自ContentValues的子类,重写所有put方法,让它们返回当前实例(this):

public class ChainContentValues extends ContentValues {
    @Override
    public ContentValues put(String key, String value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Byte value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Short value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Integer value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Long value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Float value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Double value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, Boolean value) {
        super.put(key, value);
        return this;
    }

    @Override
    public ContentValues put(String key, byte[] value) {
        super.put(key, value);
        return this;
    }

    // 按需覆盖其他put重载方法
}

子类使用示例

这样就能像你期望的那样链式调用了:

new ChainContentValues()
    .put("column_name1", "value1")
    .put("column_name2", 123)
    .put("column_name3", true);

方法二:使用静态工具类包装

如果不想子类化,也可以写一个静态工具类来实现链式调用:

public class ContentValuesChain {
    private final ContentValues values;

    private ContentValuesChain() {
        values = new ContentValues();
    }

    public static ContentValuesChain create() {
        return new ContentValuesChain();
    }

    public ContentValuesChain put(String key, String value) {
        values.put(key, value);
        return this;
    }

    public ContentValuesChain put(String key, Integer value) {
        values.put(key, value);
        return this;
    }

    // 按需实现其他put重载

    public ContentValues build() {
        return values;
    }
}

工具类使用示例

ContentValues cv = ContentValuesChain.create()
    .put("column1", "test")
    .put("column2", 456)
    .build();

总结:原生ContentValues不支持链式调用,但通过自定义子类或包装类,完全可以实现你想要的写法。

内容的提问来源于stack exchange,提问作者llihttocs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:45:02