我正在尝试为函数编写代码,该代码将帮助我深度打印 java 代码,这将帮助我构建给定的新 java pojo 对象。
函数将获取类类型并打印初始化代码,
示例:对于具有 2 个 int 成员和一个 String 成员的类 Foo:
Class Foo
int a,b;
String c;
对辅助函数的调用将是:
void printCode(Foo.getClass())
该函数将跟踪对象的所有设置器,并将调用打印为文本,Foo 类的函数输出将是:
Foo foo = new Foo();
foo.setA();
foo.setB();
foo.setC();
此类(A,M,N)的另一个更复杂的示例:
Class A
setFoo(int){};
setBar(int){};
setM(M class){};
setN(N class){};
setNAndM(M,N){};
Class M
setBaz(String){}
Class N
setQux(Float){}
函数签名将是:
void printCode(Class clazz)
对于开始类 A 所需的程序输出将是(输出是 java 代码作为字符串):
M m1 = new M();
m1.setBaz(/*some random String here*/);
N n1 = new N();
m1.setQux(/*some random Floathere*/);
M m2 = new M();
m2.setBaz(/*some random String here*/);
N n2 = new N();
m2.setQux(/*some random Floathere*/);
A a = new A();
a.setFoo(/*some random data here*/);
a.setBar(/*some random data here*/);
a.setM(m1 - /*object name from previous iteration*/);
a.setN(n1 - /*object name from previous iteration*/);
a.setNAndM(m2,n2 - /*object name from previous iteration*/);
我能够完成 99% 的工作,停止条件应该是 - 获取原始类型或字符串类型 - 否则对对象使用递归。
我唯一缺少的是正确遍历设置器的实际递归逻辑, 需要伪代码方面的帮助,例如:
void **printCode**(Class clazz){
list setters = getAllSetters(clazz);
for each setter{
list parameters = getAllParameters(setter);
if not all parameters are primitive or string:
for each setter{
if(parameter is not (String or primitive))
**printCode**(parameter)
}
}
print construction code for the object here;
}
谢谢!