将一行对象反序列化为接口属性?

时间:2018-12-27 22:51:15

标签: java class serialization interface attributes

我想知道是否有某种方法可以反序列化对象并将其分配给接口中的属性?

我已经尝试过下面的代码,但是我不知道如何使用它检查“ FileNotFound”异常,当然我不能只键入throws FileNotFoundException

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

1 个答案:

答案 0 :(得分:1)

通过将初始化代码包装在帮助程序方法中,可以在初始化隐式静态接口属性时处理检查异常的问题。

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,这会对接口的信息隐藏质量产生负面影响,因此在示例中,我将其放在单独的实用程序类中。