【问题标题】:Writing objects to file with private fields and private constructor使用私有字段和私有构造函数将对象写入文件
【发布时间】:2013-12-27 04:05:56
【问题描述】:

我正在尝试将 User 类型的对象从数组列表写入文件 - 最好是 CSV,但只要我可以从文件中读回对象并将它们存储在数组列表中(使用获取有关对象的更多信息)。

我的问题是,不仅所有字段都是私有的,而且唯一的构造函数也是如此。它是不实现可序列化的第三方类(User.class)。

我尝试了很多不同的方法来做到这一点,但问题总是来自构造函数。 User.class 没有默认构造函数。我一直看到的错误是“构造函数不可见”。

我曾尝试使用反射来访问构造函数和字段,但我似乎无法正确连接它们。

基本上,您会以什么方式解决这个问题?我应该继续反思吗?我似乎只是在这里兜圈子!

【问题讨论】:

  • 如果对象有一个私有构造函数,那么某处必须有一个工厂方法。
  • 我假设这是类末尾的部分:'私有静态类 UserFactory 实现 ItemFactory{method}'?我会弄清楚如何处理这些新信息,谢谢!
  • 因为工厂方法也是私有的,所以我得到了同样的错误,但是使用工厂方法而不是构造函数
  • 某处必须有一个 public 工厂方法。否则根本没有人可以使用它。或者一个受保护的工厂方法,或者包私有。如果其中任何一个,你都不走运。
  • 不只是:'private static class UserFactory implements ItemFactory { public User createItemFromElement(DomElement element) {method}' - 我还能使用反射和访问私有构造函数吗?

标签: java serialization reflection constructor private


【解决方案1】:

一种方法,我会使用的方法如下:

  • 创建一个可序列化的用户工厂类,称为 UserFactory
  • 为您要保留的每个可序列化用户字段提供一个字段
  • 定义一个接受用户并将值保存到其自己的字段的方法。您可能需要更深入地获得可序列化的值
  • 定义工厂方法,使用字段通过 User 中的工厂方法创建用户

这样的对象将是可序列化的,您只需要执行额外的步骤,即在写入前放入用户对象,并在读取后取出用户对象。

【讨论】:

  • 非常感谢您的输入-这很有趣,我开始做类似的事情。只是需要更多的耐心和确信它确实会起作用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2019-10-16
相关资源
最近更新 更多