Способ определения типа объекта, а затем приведение объекта из змеи yaml.load (InputStream) - PullRequest
1 голос
/ 07 декабря 2010

Итак, я пишу этот служебный класс для всех моих объектов модели, чтобы наследовать его, чтобы при каждом вызове saveToFile (имя файла) он сохранял этот объект в формате yaml. To String просто выводит файл в формате yaml. Я действительно хочу иметь возможность инициализировать все атрибуты объекта с помощью атрибутов в файле, но я не хочу заранее знать, какой это тип объекта.

Я хочу что-то похожее на

public void loadFromFile(String filename){
    try {
        InputStream input = new FileInputStream(new File(filename));
        Yaml y = new Yaml();
        this = y.load(input);
    } catch (IOException e) {
        System.out.println(e);
    }
}

это работает нормально, за исключением того факта, что вы не можете назначить объект "this".

1 Ответ

2 голосов
/ 07 декабря 2010

Вам нужно будет разыграть:

YourObject object = (YourObject) y.load(input);

Также не делайте назначения для this.Вместо этого вы должны загрузить объект извне и использовать что-то вроде BeanUtils.copyProperties(object, yamlObject)

Также взгляните на yamlbeans .

Кстати, чтобы создать служебный метод,ваш актерский состав не будет работать так.Вам лучше передать аргумент Class<T> в метод и позволить ему иметь тип возврата T.Используйте clazz.cast(..), чтобы выполнить приведение.

...