使用JSONObject进行序列化时,避开定义get或set为开头的方法名称

从结果中可以看到,JSONObject对Test对象进行序列化时,把fileName也当做属性了。

 

原因:涉及到JavaBean规范(参考:https://www.cnblogs.com/yusiming/p/9780726.html)。

JavaBean必须要为成员提供get/set方法,只提供其中的一个也是可以的,必须要有一个无参构造器,一般对于具有get或这个set方法的成员我们称之为属性,就算一个属性,没有对应的成员变量只有get/set方法,也是可以的

 

因为在接口中定义了一个get开头的方法,在父类中实现了该方法,导致JSONObject在序列化时将filenName当做属性看待

 1 import com.alibaba.fastjson.JSONObject;
 2 
 3 public class main {
 4 
 5 
 6     public static void main(String[] args){
 7 
 8         Test t=new main().new Test();
 9         System.out.println(JSONObject.toJSONString(t));
10 
11 
12     }
13     public interface a{
14         public String getFileName();
15     }
16 
17 
18     public class base implements a{
19         @Override
20         public String getFileName(){
21             System.out.println("5555555555555");
22             return "111111111111";
23         }
24     }
25 
26     public class Test extends base{
27         public String a="0";
28         public String b="1";
29         public String c="2";
30     }
31 
32 }

结果:

1 5555555555555
2 {"a":"0","b":"1","c":"2","fileName":"111111111111"}

 

posted @ 2019-11-26 14:30  月色深潭  阅读(1848)  评论(0编辑  收藏  举报