java - 从其构造函数中保存的对象创建一个对象

标签 java

需要明确的是:我有一个在运行时不断更改其值的对象,我想将创建和修改的对象保存在文件中。 我找到了如何做到这一点,还找到了如何读回将其保存到另一个对象中的对象。但问题是:是否可以使用存储我要检索的对象的文件的唯一参数来调用我的对象的类构造函数?

NeuralNetwork(File fs){
    ObjectInputStream ois;
    changeFileSave(fs);      //just sets the file as savefile for the future
    try{
        ois = new ObjectInputStream(new FileInputStream(_saveNet));  //_saveNet = fs
        this = (NeuralNetwork) ois.readObject();
    }
    catch(Exception e){
        //error message
    }
}

它给了我一个关于“this =”的错误 如果可能的话我该怎么做?

谢谢

最佳答案

关键字 this 是只读引用,即使在构造函数中也不能写入 this = 。而且,java中的构造函数不返回任何东西。

您必须获取已读取的对象,并将其属性一一映射(或使用反射)到您正在实例化的对象中拥有的属性。

但是,我认为通过将文件传递给构造函数并在其中执行 IO,您违反了关注点分离。通过以这种方式编写内容,您将永远将神经网络与文件绑定(bind)在一起,并带来一系列随之而来的问题,包括(不限于)您可能在某个时候将值存储在其他地方这一事实。

IMO 你最好使用 factory pattern构建您的对象并使您的 NeuralNetwork 对象成为普通对象。然后歧义就消失了,因为你的工厂方法可以简单地返回 (NeuralNetwork) ois.readObject();

关于java - 从其构造函数中保存的对象创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43414733/

相关文章:

java - 编译java时如何抑制Cannot Find Symbol错误?

java - 在 pdf 或 excel 中显示表情符号

Java - 启动时读出系统环境

java - 等待多个阻塞队列

java - 比较两个对象时 equals 方法如何返回 false : e1. equals(e2)

java - 应用程序在新的谷歌安卓 map 上崩溃

java - 向数组列表中的每个字符串添加一个字符

java - 在 Docx4J 中创建 .docx 文件的新部分

java - 如何将要注入(inject)的当前 Activity 传递给 Dagger2 中的对象

java - 发出类似 "mvn install"的命令时出现错误