Java7 / enum constructor / Files.createTempDirectory (Строковый префикс, FileAttribute... attrs) - PullRequest
1 голос
/ 17 ноября 2011

Я хотел бы создать экземпляр Path для конструктора enum:

/** Temporary paths. */
public enum PATHS {

    /** First temporary directory. */
    PATH1(Files.createTempDirectory(new StringBuilder("tnk").append(File.separator).append("path1")
            .toString())),
    /** Second temporary directory. */
    PATH2(Files.createTempDirectory(new StringBuilder("tnk").append(File.separator).append("path2")
            .toString()));

    /** {@link Path} reference. */
    final Path mPath;

    /**
     * Constructor.
     * 
     * @param pPath
     *            {@link Path} reference
     */
    PATHS(final Path pPath) {
        mPath = pPath;
    }

    /**
     * Get {@link File} associated with the path.
     * 
     * @return {@link File} reference
     */
    public File getFile() {
        return mPath.toFile();
    }
}

Files.createTempDirectory(String, FilleAttribute<?> atts) выдает проверенное исключение (IOException), но как мне перехватить или выбросить исключение, или, точнее, как мне обработать исключение? Кажется, это вопрос с дампом, но сейчас я понятия не имею.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Вместо этого обработайте его в конструкторе.

PATH1("path1"),
PATH2("path2");

final Path mPath;

PATHS(final String path) {
    try {
        mPath = Files.createTempDirectory(new StringBuilder("tnk").append(File.separator).append(path).toString());
    } catch (IOException e) {
        throw new ExceptionInInitializerError(e);
    }
}

Дополнительным преимуществом является то, что в этом конкретном случае он также минимизирует дублирование кода.

Сказал, что я действительно дважды подумал о том, что Том Хотин пытается вам сказать.

0 голосов
/ 17 ноября 2011

Действительно что-либо касающееся состояния не должно быть сделано со статическими полями.Так что просто делает "ПУТИ" нормальным классом.Создайте его один раз и добавьте к объектам, которые должны его использовать.Лучший дизайн должен улучшить обработку ошибок, тестирование, зависимость, безопасность и т. Д.

...