gpt4 book ai didi

java - 在 Java 中将标志传递(或不传递)给构造函数

转载 作者:行者123 更新时间:2023-11-30 03:04:31 26 4
gpt4 key购买 nike

例如,对于大致相同的任务使用不同名称的方法是有意义的

  • open(字符串文件名);
  • createThenOpen(字符串文件名);//首先创建默认内容的文件,然后处理该文件。

这种命名方法不适用于构造函数。想象一下构造函数采用上面的文件名。我有多种选择来处理这两种情况:

  1. 构造函数中的 If 语句:如果文件不存在则创建它。这不太好,因为构造函数的行为是隐式的,并且调用者可能会创建不需要的文件而不是打开现有文件。
  2. 向构造函数添加一个标志:MyClass(String filename, boolean createNew)。不太好,因为像 MyClass("hello.txt", true) 这样的调用是神秘的。
  3. 重载,以便单个参数始终假定文件存在,并且附加虚拟参数的存在意味着应该创建文件。这也太丑了。
  4. 添加一个字符串标志,如 RandomAccessFile(File file, String mode) 中所示,其中 mode"r", "rw" 等等。对于我的目的来说,这感觉非常笨拙。
  5. 添加一个类似于 Filescopy(Path source, Path target, CopyOption... options)enum 标志。感觉也很笨重。
  6. 具有不带参数的构造函数,然后在创建对象后立即调用如上所述的单独方法。不太好,因为如果不使用指定文件中的数据实例化对象,则拥有对象的实例是没有意义的。

目前,我似乎实际上更喜欢上面的数字 (6),并且只需在无参数构造函数之后立即调用两个具有不同名称的方法即可。我是否忽略了任何选项,或者是否有针对这些场景的“给定”方法?

编辑:正如下面其他人指出的那样,当然还有第七个,也许是最明显的选项:

  • 使用工厂方法!
  • 最佳答案

    使您的构造函数具有一长串参数 protected ,引入许多具有精确参数列表的名为createFooWithBar()public static方法调用你的构造函数。

    关于java - 在 Java 中将标志传递(或不传递)给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152220/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com