• net.sf.json判断对象属性是否为空


    说明:今天写代码发现对net.sf.json.JSONObject取值后判断是否为null,死活进不去,打印了获取属性后的值,发现是一个被封装为JSONNull对象

    import net.sf.json.JSONNull;
    import net.sf.json.JSONObject;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Test {
    
        public static void main(String[] args) {
                Map<String, Object> m = new HashMap<>();
                m.put("aa", null);
                JSONObject json = JSONObject.fromObject(m);
                Object o = json.get("aa");
                System.out.println(o.getClass());
                System.out.println(null == json.get("aa"));
                System.out.println(JSONNull.getInstance().equals(json.get("aa")));
    System.out.println(o instanceof JSONNull) } }

    对应的打印

    class net.sf.json.JSONNull
    false
    true

     点进去看JSONNull源码如下

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package net.sf.json;
    
    import java.io.IOException;
    import java.io.Writer;
    
    public final class JSONNull implements JSON {
        private static JSONNull instance = new JSONNull();
        //默认是一个JSONNull的实例 instance
        public static JSONNull getInstance() {
            return instance;
        }
    
        private JSONNull() {
        }
        //可以传null来进行判断
        public boolean equals(Object object) {
            return object == null || object == this || object == instance || object instanceof JSONObject && ((JSONObject)object).isNullObject() || "null".equals(object);
        }
        //这个也可以,但是会抛异常,业务代码中,这种肯定是不想要被抛出的
        public boolean isEmpty() {
            throw new JSONException("Object is null");
        }
        //这个也可以,抛异常对业务代码不太友好
        public int size() {
            throw new JSONException("Object is null");
        }
        //这个可间接判断
        public String toString() {
            return "null";
        }
    
        //···
    }

    可用的判断属性是否为空的方法,建议使用重写的equals方法,因为JSONNull没有提供有参的构造方法,创造instance,进而进行调用toString、size、isEmpty等方法,也真是够垃圾的,我找了一

    圈,在net.sf.json.JSONObject 中找到了几处JSONNull的使用,用的都是toString方法或者equal方法

    //判断属性aa的值是否是null
    JSONNull.getInstance().equals(json.get("aa"))
  • 相关阅读:
    题解-AtCoder ARC-083F Collecting Balls
    题解-CTS2019氪金手游
    题解-CTS2019随机立方体
    题解-APIO2019路灯
    题解-APIO2019桥梁
    vue-property-decorator 源码阅读
    如何在Vue项目中使用TypeScript
    在 Vue+TypeScript 项目中,如何配置 ESLint 和 Prettier
    JavaScript 原型和原型链
    pre-commit + imagemin 实现图片自动压缩
  • 原文地址:https://www.cnblogs.com/xuchao0506/p/16434838.html
Copyright © 2020-2023  润新知