Я генерирую классы на основе полученных структур JSON во время выполнения (используя jsonschema2pojo ).
1. Нужно ли сохранять класс как файл в Java, чтобы иметь возможность его использовать? В настоящее время класс сохраняется следующим образом:
codeModel.build(new File("src").getAbsoluteFile());
2. Цель - проверить, совпадает ли сгенерированный класс (тело класса или его содержимое) с уже существующим файлом класса (с тем же именем), чтобы пропустить сохранение этого учебный класс. С другой стороны, если данные класса были обновлены и отличаются от существующего класса, новые данные будут перезаписаны.
в jsonschema2pojo
, класс будет сгенерирован и сохранен в JCodeModel
объекте следующим образом:
...
// Returns a JType:
mapper.generate(codeModel, className, "com.example", apiResultString);
// returned value: com.sun.codemodel.JDefinedClass(ClassName)
//Saves the generated class above, to a file:
codeModel.build(new File("src").getAbsoluteFile());
Как я могу извлечь стандартный класс из JDefinedClass
, чтобы сравнить его с существующим классом?
Я попробовал код ниже, но он не был успешным:
String str = String.valueOf(mapper.generate(codeModel, className, "com.example", apiResultString));
//str = com.sun.codemodel.JDefinedClass(ClassName)
String name = str.substring(str.indexOf("(")+1,str.indexOf(")"));
//name = ClassName
codeModel._getClass("com.example" + name);
// This also returns a JDefinedClass
Class.forName()
может быть полезно для получения сгенерированного класса, который сохраняется в объекте JCodeModel
(codeModel), хотя я не уверен, как это сделать.
3. Какой лучший способ сравнить эти классы? Основной метод заключается в том, чтобы сохранить вновь созданный класс в виде файла рядом с существующим файлом класса, сравнить его как два обычных файла в Java (с использованием контрольной суммы) и соответственно заменить или удалить файлы. (Это делает весь процесс получения контента нового класса без его сохранения, чепуха) Однако, я полагаю, это ненужные накладные расходы.