Десериализация объекта в одну строку для атрибута интерфейса? - PullRequest
0 голосов
/ 28 декабря 2018

Мне было интересно, есть ли какой-нибудь способ десериализации объекта и присвоения его атрибуту в интерфейсе?

Я пробовал приведенный ниже код, но не знаю, как проверить наличие "FileNotFound "исключение с ним, и, конечно, я не могу просто набрать throws FileNotFoundException.

public interface Race_Attributes {
    String[] FirstNames = (String[]) new ObjectInputStream(new FileInputStream("./res/binary_files/Human_FirstNameString[].ser")).readObject();
}

1 Ответ

0 голосов
/ 27 июня 2019

Вы можете решить проблему проверенных исключений при инициализации неявно статических атрибутов интерфейса, заключив код инициализации в вспомогательный метод.

public interface Race_Attributes {
    String[] FirstNames = Deserializer.deserializeFirstNames();
 }

final class Deserializer {

    private Deserializer() {}

    public static String[] deserializeFirstNames() {
        try(ObjectInputStream in = new ObjectInputStream(
            new FileInputStream(
                "./res/binary_files/Human_FirstNameString[].ser"))) {
            return (String[]) in.readObject();
        }
        catch( IOException | ClassNotFoundException e) {
            return new String[0];
        }
    }
}

Поскольку Java 8 допускает статические методы в интерфейсах, вы также можете разместитьвспомогательный метод deserializeFirstNames прямо в интерфейсе.Однако, поскольку методы в интерфейсах должны быть public, это отрицательно скажется на качестве информации, скрывающей ваш интерфейс, поэтому в примере я поместил его в отдельный служебный класс.

...