在Java中向构造函数传递标志(或不传递)
例如,为大致相同的任务使用不同名称的方法是有意义的在Java中向构造函数传递标志(或不传递),java,constructor,instantiation,flags,enum-flags,Java,Constructor,Instantiation,Flags,Enum Flags,例如,为大致相同的任务使用不同名称的方法是有意义的 open(字符串文件名) createThenOpen(字符串文件名);//首先使用默认内容创建文件,然后处理该文件。 这种命名方法不适用于构造函数。假设构造函数采用如上所述的文件名。我有多种选择来处理这两种情况: 构造函数中的If语句:如果文件不存在,则创建它。这并不好,因为构造函数的行为是隐式的,调用方可能会创建不需要的文件,而不是打开现有文件 向构造函数添加一个标志:MyClass(字符串文件名,布尔值createNew)。不是很好,
open(字符串文件名)代码>
createThenOpen(字符串文件名);//首先使用默认内容创建文件,然后处理该文件。
MyClass(字符串文件名,布尔值createNew)
。不是很好,因为像MyClass(“hello.txt”,true)
这样的调用是神秘的随机访问文件(文件文件,字符串模式)
中的模式是“r”
,“rw”
等。这对我来说很笨重
文件的复制(路径源、路径目标、复制选项…选项)的枚举标记。感觉也很笨重
让你的构造函数有一长串参数
受保护
,引入许多名为createFooWithBar()
的公共静态
方法,这些方法具有调用你的构造函数的精确参数列表。让你的构造函数私有化并添加公共工厂方法。
我认为这是一种非常常见的模式
另一种模式是“构建器”。使构造函数仅对同一包的类可访问。在同一个包中添加一个生成器(或多个生成器,如果您愿意),该生成器将调用构造函数,并调用构造对象所需的任何其他方法。如果不存在,为什么不创建一个子类,通过创建文件扩展行为?对于选项2,make()听起来不是一个很好的构造函数。它意味着与类名相同,那么您的类名是什么?使用子类毫无意义,因为超类和子类将表示完全相同类型的对象。啊!当然可以。使用SO就像为出版物写下一个数学证明:你需要仔细地为他人制定证明,以便看到细节,并发现其缺陷。@使用SO就像写下证明,然后收到“你有一个错误,但我为你解决了”@alamar-我希望评论家或论文也能对你有所帮助。