Сравните существующий класс (файл) с содержимым JDefinedClass - PullRequest
0 голосов
/ 18 мая 2019

Я генерирую классы на основе полученных структур 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 (с использованием контрольной суммы) и соответственно заменить или удалить файлы. (Это делает весь процесс получения контента нового класса без его сохранения, чепуха) Однако, я полагаю, это ненужные накладные расходы.

...