我正在尝试使用jsonschema2pojo从第三方JSON模式生成Java类,因此我需要使用类的名称。其中一个类称为System
。结果,对于除该类之外的所有其他类,toString()
方法中存在错误:
package com.example;
// within a class
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(Status.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
...
}
问题出在对System.identityHashCode()
的调用中,因为系统类被解析为同一程序包中的类,而不是java.lang.System
类。在System
类中生成的调用如下所示:
sb.append(System.class.getName()).append('@').append(Integer.toHexString(java.lang.System.identityHashCode(this))).append('[');
JSON完全可以是任何JSON,即对于2类,甚至是{ "type": "object" }
,一个叫做System
,另一个叫Foo
也会引起错误。我正在使用Java API生成代码,如下所示:
String packageName = "com.example";
JCodeModel codeModel = new JCodeModel();
GenerationConfig config = new DefaultGenerationConfig() {
@Override
public boolean isGenerateBuilders() { // set config option by overriding method
return true;
}
};
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
mapper.generate(codeModel, #NAME_OF_CLASS#, packageName, SOME_URL);
codeModel.build(outputDir);
如何生成将完全合格的java.lang.System
类用于所有类的代码?
答案 0 :(得分:0)
实际上,这是Intellij的问题。生成的类是正确的,我只是将它们从生成的目录复制到源目录,而Intellij认为这会有所帮助,并将类简化为副本的一部分。结果,这实际上破坏了生成的类。