Создание динамического класса с полями из других классов - PullRequest
0 голосов
/ 21 апреля 2019

Пример:

public class MyObject{
    @SerializedName("hello")
    @NotNull @MaxLength(256) @NotEmpty
    private String hello;
}

public class MyOtherObject{
    @SerializedName("world")
    @NotNull @MaxLength(512) @NotEmpty
    private String world;
}

Как динамически генерировать класс MyDynamicHelloWorldObject таким образом, чтобы он стал эквивалентом:

public class MyDynamicHelloWorldObject{
    @SerializedName("hello")
    @NotNull @MaxLength(256) @NotEmpty
    private String hello;

    @SerializedName("world")
    @NotNull @MaxLength(512) @NotEmpty
    private String world;
}

Поиск решений, потому что копирование и вставка приведут к ошибкам, особенно при изменении кода в будущем.

1 Ответ

0 голосов
/ 21 апреля 2019

Не уверен, что это рекомендуемый способ.Вы можете создать файл MyDynamicHelloWorldObject.java, объединив два файла, как показано ниже:

String fileName1 = "MyObject.java";
String fileName2 = "MyOtherObject.java";

//read and write with try-with-resources
try (Stream<String> stream1 = Files.lines(Paths.get(fileName1));
    Stream<String> stream2 = Files.lines(Paths.get(fileName2));
    BufferedWriter writer1 = new BufferedWriter(new FileWriter("MyDynamicHelloWorldObject.java"))) {

    //first line 
    writer1.write("public class MyDynamicHelloWorldObject{\n");
    //merge two streams and skip first line as it has class name
    Stream.concat(stream1.skip(1),stream2.skip(1)).forEach(line->{try {
        writer1.write(line+"\n");
    } catch (IOException e) {
        //error handling
    }});
} catch (IOException e) {
    //error handling
}
}
...