如何在使用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
相关产品推荐
相关产品推荐

