【问题标题】:How to assign new object to existing one如何将新对象分配给现有对象
【发布时间】:2012-11-20 10:54:29
【问题描述】:

我在从文件中读取对象时遇到问题..

在main中,我让eshop end调用了一个方法loadshop。

MyShop eshop = new MyShop();
eshop.loadShop("eshop.txt");

我还从文件中获取了 shop 对象。

@Override
public void loadShop(String filename) {

    try{
         ObjectInput out = new ObjectInputStream(new FileInputStream(filename));
         MyShop shop = (MyShop)out.readObject();
         out.close();

    } catch (Exception e) {
           e.printStackTrace();
    }
}

但我就是不知道如何将“shop”分配给“eshop”

感谢您的任何回答..:-)(对不起我的英语)

【问题讨论】:

  • 定义assign?你想在那个任务中做什么?您的意思是创建参考副本?还是创建实例副本?
  • 我期待in.readObject();
  • 我想将商店的内容(我从文件中获取)复制到已经创建的实例(eshop)。
  • 您能否详细说明out 变量?

标签: java assign


【解决方案1】:

重新设计就行了,不用写了

MyShop eshop = new MyShop();

改为写

MyShop eshop = MyShop.loadShop("eshop.txt");

并将loadShop 方法设为静态。并让它返回 MyShop 实例,如果它还没有这样做的话。

如果这不是一个选项,那么通过 hack 获取该实例仍然比编写手动复制代码更好:

public class MyShop {
  private MyShop readShop;

  public MyShop getReadShop() { return readShop; }

  public void loadShop(String fName) {
    try {
       ObjectInput out = new ObjectInputStream(new FileInputStream(filename));
       this.readShop = (MyShop)out.readObject();
       out.close();

    } catch (Exception e) {
      throw new RuntimeException(e);
    }
}

你会像这样使用它

MyShop tempShop = new MyShop();
tempShop.loadShop();
MyShop eshop = tempShop.getReadShop();

【讨论】:

  • 嗨,谢谢,但正如我上面所说,我无法将其更改为静态并使其返回 MyShop 实例.. 这是一个家庭作业(不幸的是)..:-(
  • 我是这样做的..:-) 非常非常感谢..:-)
【解决方案2】:

将您的loadShop 方法设为static 方法。使该方法返回MyShop 对象。在MyShop 类上调用它。将返回值分配给eshop。示例:

public class MyShop {
    public static MyShop loadShop(String filename) {
        // ...
        MyShop shop = (MyShop)out.readObject();

        // ...
        return shop;
    }
}

调用方法的地方:

MyShop eshop = MyShop.loadShop("eshop.txt");

【讨论】:

  • 感谢您的建议。这是很酷的解决方案。但不幸的是,我无法将 loadShop 方法更改为 static 和 "Myshop" 。这是学校的作业,我们不能更改它..:-( 它必须是“public void loadShop(String filename)”
  • 如果方法是void(不返回值)而不是static,那么在方法内部你要做的就是设置MyShop对象的成员变量您正在调用该方法。
  • 请问我该怎么做..(对不起,我是初学者)
  • 如果您添加到问题中的loadShop 方法无法更改,那么这是绝对没用的方法。它基本上是无操作的。
  • 当然可以改,但是我不能改标题..:-)
【解决方案3】:

只需编辑所有eshop 的字段,以匹配shop

【讨论】:

    【解决方案4】:

    在您的 MyShop 类中创建您的方法 loadShop static 并返回您的对象。

    public static MyShop loadShop(String something){
    // do some thing
    
    return (MyShop)out.readObject();     
    }
    

    在你的代码中

    MyShop eshop = MyShop.loadShop("eshop.txt");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 2019-12-06
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2012-07-21
      相关资源
      最近更新 更多