定义了工厂方法并标识了 @JSONCreator ,但是发现其优先级弱于任何一个无参数构造器(包括 protected 和 private )。看代码似乎很早就是这样界定了,不知道是有什么特殊的考虑?
@JSONCreator
protected
private
或者换个思路,如果想要自定义对象的工厂方法,怎么做比较好?(利用工厂对这个对象的 setter 和 getter 做一些扩展)。
vecaoik11#
同问,还有,当传入一个空json对象,看代码直接返回null,没有进入JSONCreator注解的构造方法中,没法校验。
l3zydbqr2#
是的,这个有什么问题?
zbq4xfa03#
如果想要自定义对象的工厂方法,怎么做比较好?(利用工厂对这个对象的 setter 和 getter 做一些扩展)。
如下代码, @JSONCreator 是走不进去的。
public class A { private int a; public void setA(int a) {this.a = a;} public int getA() {return a;} @JSONCreator public static A create(int a) { A a1 = createFromSomeFactory(); // 比如对象池,或者通过工厂返回的东西修改一下 getter 和 setter 的逻辑 a1.setA(a); return a1; }}
public class A {
private int a;
public void setA(int a) {this.a = a;}
public int getA() {return a;}
public static A create(int a) {
A a1 = createFromSomeFactory(); // 比如对象池,或者通过工厂返回的东西修改一下 getter 和 setter 的逻辑
a1.setA(a);
return a1;
}
看了下实现 https://github.com/alibaba/fastjson/blob/1.1.52.android/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java#L194 ,似乎是一定需要准备一个非默认构造器,然后才有可能走到这个 @JSONCreator 标注的方法。
3条答案
按热度按时间vecaoik11#
同问,还有,当传入一个空json对象,看代码直接返回null,没有进入JSONCreator注解的构造方法中,没法校验。
l3zydbqr2#
是的,这个有什么问题?
zbq4xfa03#
如果想要自定义对象的工厂方法,怎么做比较好?(利用工厂对这个对象的 setter 和 getter 做一些扩展)。
如下代码,
@JSONCreator
是走不进去的。看了下实现 https://github.com/alibaba/fastjson/blob/1.1.52.android/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java#L194 ,似乎是一定需要准备一个非默认构造器,然后才有可能走到这个
@JSONCreator
标注的方法。