【问题标题】:Deserializing an object in one line for an interface attribute?在一行中反序列化接口属性的对象?
【发布时间】:2018-12-27 22:51:15
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以使用 try / catch 块检查异常,但您不能只将代码放入接口中。代码只能进入方法内部,通常接口只包含抽象方法,尽管从 Java 8 开始它们可以包含默认方法。

标签: java class serialization interface attributes


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

【讨论】:

  • 谢谢!感谢您愿意回答这么古老的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多