從結果中可以看到,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"}