泛型的反序列化
简化问题
日常使用过程中,我们经常碰到泛型的序列化Json,但是有时候我们需要把一个Json反序列化成一个泛型对象,怎么做,你可能会想到这样做,例如在Gson中
1 | Gson().fromJson<List<String>>(JsonString, List<String>::class.java) |
日常使用过程中,我们经常碰到泛型的序列化Json,但是有时候我们需要把一个Json反序列化成一个泛型对象,怎么做,你可能会想到这样做,例如在Gson中
1 | Gson().fromJson<List<String>>(JsonString, List<String>::class.java) |
测试代码
1 | import com.google.gson.Gson |
运行的时候,会抛类型转换错误
可以jvm参数 java.system.class.loader 设置默认的系统加载器,默认是当前线程的ContextClassLoader。来自sun.misc.Launcher.getLauncher的getClassLoader, 而getLauncher的getClassLoader实际来自Launcher.AppClassLoader.getAppClassLoader。
代码层面,所有的锁在cpu层面都是一条条的指令,所有最终所有的锁,都要考底层指令的支持,CAS是代码层面比较常用的一种“无锁”,实际对应于cpu里面的几条指令,当然一个cpu有多个核下是如何解决锁的。在单核的时候,还可以通过关闭中断,来阻止操作系统调度。但是在多核的情况下,各个cpu是并行执行的,因此这个时候,就会出现,同时获取到锁的状态,而这个时候,通过禁止中断,是没有效果的,就需要引入一种机制实现多核本地缓存失效和内存全局的锁,涉及多级缓存的失效与同步,其实在计算机组成原理与操作系统里面有学的。
程序莫名其妙出了
error:java.lang.NullPointerException: Null reference used for synchronization (monitor-enter)
就是在使用同步锁的时候,是锁的对象是空的。很是奇怪,看代码没觉得啊。打印一下,确实是空的,Why?