小编Pra*_*eek的帖子

使用工厂方法使用@JsonCreator反序列化枚举

我正在尝试使用jackson将json反序列化为枚举.如果工厂方法只有一个参数,它工作正常.一旦我们添加更多参数,它就会停止工作.

这是我试过的代码示例.

public enum Test {
    FIRST(1, "first");

    private final int intProp;
    private final String stringProp;

    Test(int i, String stringProp) {
        this.stringProp = stringProp;
        this.intProp = i;
    }

    private static final Map<String, Test> allEntries = new HashMap<>(Test.values().length);
    static {
        for(Test each : Test.values()){
            allEntries.put(getCode(each.intProp, each.stringProp), each);
        }
    }

    private static String getCode(int i, String s){
        return s + i;
    }

    @JsonCreator(mode = Mode.PROPERTIES)
    public static Test forValues(@JsonProperty("intProp") int intProp,
                                 @JsonProperty("stringProp") String stringProp
                                 ){
        return allEntries.get(getCode(intProp,stringProp));
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下代码反序列化json

String json …
Run Code Online (Sandbox Code Playgroud)

java enums serialization json jackson

5
推荐指数
1
解决办法
1503
查看次数

HashMap持有重复键

在尝试时HashMap,我发现了一些奇怪的东西.

跑4个线程,每个线程尝试使用0到9999之间的键(键,值),值为常量字符串.完成所有线程后,map.size()返回大于10,000的值.这怎么发生的?这是否意味着地图包含重复的键?

我重复了一遍map.entrySet(),发现一些键的计数确实超过了1.如果我get()在地图上为一个这样的键做了一个值,将返回什么值.

这是我试过的代码

final HashMap<String, String> vals = new HashMap<>(16_383);
Runnable task = new Runnable() {
    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            vals.put(""+i, Thread.currentThread().getName());
        }
    }
};
Thread thread = new Thread(task, "a");
Thread thread1 = new Thread(task, "b");
Thread thread2 = new Thread(task, "c");
Thread thread3 = new Thread(task, "d");
thread.start();
thread1.start();
thread2.start();
thread3.start();
thread.join();
thread1.join();
thread2.join();
thread3.join();
System.out.println(Thread.currentThread().getName() + "vals …
Run Code Online (Sandbox Code Playgroud)

java concurrency hashmap

1
推荐指数
1
解决办法
201
查看次数

标签 统计

java ×2

concurrency ×1

enums ×1

hashmap ×1

jackson ×1

json ×1

serialization ×1