一种同时支持强类型和若类型的增强型Kv

import com.alibaba.fastjson.JSON;

import java.util.HashMap;

/**
 * 链式HashMap
 * Tkv: typed key value
 *
 * @author Luyao
 */
public class Tkv<K, V> extends HashMap<K, V> {

    /**
     * 创建实例
     *
     * @param key   键,泛型
     * @param value 值,任意类型
     * @return Kv实例
     */
    public static <K> Kv<K, Object> ofAny(K key, Object value) {
        return new Kv<K, Object>().add(key, value);
    }

    /**
     * 创建实例
     *
     * @param key   键
     * @param value 值
     * @param <K>   键类型,根据第一个键的数据类型自动决定整体的键类型
     * @param <V>   值类型,根据第一个值的数据类型自动决定整体的值类型
     * @return Kv实例
     */
    public static <K, V> Tkv<K, V> of(K key, V value) {
        return new Tkv<K, V>().add(key, value);
    }

    /**
     * 链式添加键值对
     *
     * @param key   键
     * @param value 值
     * @return 当前对象
     */
    public Tkv<K, V> add(K key, V value) {
        put(key, value);
        return this;
    }

    /**
     * 获取值
     * 自动根据接收变量定义的类型进行强转
     *
     * @param key 键
     * @param <T> 值类型
     * @return 值
     */
    public <T> T getAs(K key) {
        return (T) get(key);
    }

    /**
     * 将当前对象转JSON字符串
     *
     * @return 当前对象JSON
     */
    public String toJson() {
        return JSON.toJSONString(this);
    }
}

使用:

// 强类型
Tkv<String, String> params = Tkv.of("id", "100")
        .add("name", "yy")
        .add("age", "16");
String name = params.get("name");
String body = params.toJson();
// 弱类型
Tkv<Object, Object> params1 = Tkv.ofAny("id", 100)
        .add("name", "yy")
        .add("age", 16);
int age = params1.getAs("age");


评论区

JFinal

2020-11-12 17:31

适用于对类型有要求的场景,赞一个

路遥_美好人生

2020-11-12 17:49

@JFinal 用了这个Kv后几乎不需要用HashMap了。
想象一下如果用HashMap需要先定义key和value类型,然后再一行一行添加数据。
此Kv自动根据第一个key和value确定类型,然后依然可通过编译器的快捷键自动生成对应类型的对象声明。

JFinal

2020-11-12 18:04

@路遥_美好人生 HashMap 的用法不简洁,不支持链式调用,Kv 用着多爽

路遥_美好人生

2020-11-12 18:25

@JFinal 是的,有时候只需要一些极简的封装就可以获得极爽的开发体验

JFinal

2020-11-12 19:06

@路遥_美好人生 为了避免与 Kv 重名,这个类可以改为 Tkv , 表示 typed key value

路遥_美好人生

2020-11-12 19:13

@JFinal 嗯,好的

北流家园网

2020-11-13 08:38

没看得出强在哪里,Kv比这简洁多了。

JFinal

2020-11-13 11:29

@北流家园网 这个是带泛型的,如果被存放的数据需要类型,这个比没有类型的会好

热门分享

扫码入社