Java добавить переменную к объекту при инициализации - PullRequest
0 голосов
/ 21 января 2019

Я хочу добавить новый объект в мой объект "yamlFile" при инициализации.

public yamlFile config = new yamlFile() {

    protected ServerGroup GROUP_BELOW_16, GROUP_16, GROUP_17, GROUP_18, GROUP_ABOVE_18;

    @Override
    public void load() {
        super.load();
        try {
            GROUP_BELOW_16 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.-16"));
            GROUP_16 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.16"));
            GROUP_17 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.17"));
            GROUP_18 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.18"));
            GROUP_ABOVE_18 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.+18"));
        } catch (final NullPointerException e) {
            Bot.getLogger().warning("Path existiert nicht");
            e.printStackTrace();
        } catch (final Exception e) {
            e.printStackTrace();
        }

    }

}.setFolder("data").setFilename("config.yml").build();

Таким образом, в объекте yamlFile нет объектов "ServerGroup".Поэтому я хочу добавить немного.Поэтому я добавил их при инициализации, но они недоступны из других источников.Поэтому я не могу использовать их в другом методе, таком как:

public void method(){
    config.GROUP_16 = null;
}

Мой вопрос: что я должен сделать, чтобы сделать объекты ServerGroup доступными без их реализации в «оригинальном» классе yamlFile?

Оригинальный класс yamlFile:

public class yamlFile {

    /**
     * 
     * var methods
     * 
     **/
    private String folder;
    private String filename;

    public String getFolder() {
        return folder;
    }

    public yamlFile setFolder(String folder) {
        this.folder = folder;
        return this;
    }

    public String getFilename() {
        return filename;
    }

    public yamlFile setFilename(String filename) {
        this.filename = filename;
        return this;
    }

    /**
     * 
     * file methods
     * 
     **/
    private File file;

    public yamlFile set() {
        file = new File(getFolder(), getFilename());
        return this;
    }

    final private YamlConfiguration yamlConfiguration = new YamlConfiguration();

    /**
     * Checks for the specific file if it exists.
     */
    public void fileExists() throws FileNotFoundException {
        try {

            if (!file.exists()) {
                yamlConfiguration.options().copyDefaults(true);
                file = new File(getFolder(), getFilename());
                yamlConfiguration.save(file);
            }
        } catch (final NullPointerException e) {
            e.printStackTrace();
        } catch (final IllegalArgumentException e) {
            e.printStackTrace();
        } catch (final IOException e) {
            e.printStackTrace();
        }
    }

    public void load() {
        try {
            fileExists();
        } catch (final FileNotFoundException e) {
            Bot.getLogger().info("Creating file: " + getFolder() + "/" + getFilename());
        }
        try {

            yamlConfiguration.load(file);

        } catch (final FileNotFoundException e) {
            e.printStackTrace();
        } catch (final IOException e) {
            e.printStackTrace();
        } catch (final InvalidConfigurationException e) {
            e.printStackTrace();
        }
    }

    public void save() {
        try {
            yamlConfiguration.save(file);
        } catch (final IOException e) {
            e.printStackTrace();
        }
    }

    public YamlConfiguration getFile() {
        return yamlConfiguration;
    }

}

Ответы [ 2 ]

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

Спасибо за ответы! Я только что нашел решение из-за комментария Лана Маклаирда!Я просто создаю новый внутренний класс, который расширяет yamlFile, а затем добавляю туда свои свойства.

Если кому-то может понадобиться этот код, я выложу его здесь:

public class FileManager {

    public class config extends yamlFile {
        public ServerGroup GROUP_BELOW_16, GROUP_16, GROUP_17, GROUP_18, GROUP_ABOVE_18;

        @Override
        public void load() {
            super.load();
            try {
                GROUP_BELOW_16 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.-16"));
                GROUP_16 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.16"));
                GROUP_17 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.17"));
                GROUP_18 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.18"));
                GROUP_ABOVE_18 = Bot.getServergroupById(Bot.getFileManager().getConfigConfiguration().getInt("age.+18"));
            } catch (final NullPointerException e) {
                Bot.getLogger().warning("Path existiert nicht");
                e.printStackTrace();
            } catch (final Exception e) {
                e.printStackTrace();
            }

        }
    }

    public config config = (api.filemanager.FileManager.config) new config().setFolder("data").setFilename("config.yml").set();

    public YamlConfiguration getConfigConfiguration() {
        return config.getFile();
    }

    public config getConfig() {
        return config;
    }
}
0 голосов
/ 21 января 2019

Я бы создал интерфейс (например, ServerGroupYamlFile), который расширяет yamlFile. Этот интерфейс будет включать ваши методы.

public ServerGroup getGroup16(){
   return config.GROUP_16;
}

Затем вы реализуете свой интерфейс:

public yamlFile config = new ServerGroupYamlFile() { ....

Тогда у вас есть возможность добавить любой метод в ваш класс yaml.

Если список групп является динамическим, то просто предоставьте в интерфейсе метод, который возвращает список групп.

public List<ServerGroup> getGroups(){
   return yourGroups;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...