【问题标题】:Java, my own copy() method would not workJava,我自己的 copy() 方法不起作用
【发布时间】:2021-12-04 22:00:27
【问题描述】:

我正在学习java,遇到了一个小问题,我的copy() 方法不起作用。我根据 UML 图工作,我很确定我做的一切都是正确的。代码如下:

构造函数:

public FileName(String name, String extension)
  {
    this.name = name;
    this.extension = extension;
  }

copy()方法:

public FileName copy()
  {
    return new FileName();
  }

错误在括号FileName() 处闪烁,它说:'FileName(java.lang.String, java.lang.String)' in 'Exam_Practice_4.FileName' cannot be applied to '()'
这也是我正在使用的 UML 图:https://imgur.com/a/oN87fpg
如果我能得到一些帮助,将不胜感激。提前致谢。

【问题讨论】:

  • 从外观上看,FileName 类没有默认(也称为无参数)构造函数。在方法copy() 中调用它时,我们需要将参数nameextension 传递给构造函数调用。 --- 顺便说一句:一个众所周知的模式是写一个copy constructor
  • 我明白了,但这意味着图表不正确。我说的对吗?
  • 没有。图表不显示默认构造函数。
  • 对不起,我是新手,有点不懂。 ``` + FileName(name : String, extension : String) ``` 不是默认构造函数吗?
  • 没有。正如我所说:默认构造函数是无参数构造函数。我建议阅读this tutorial on constructors from Oracle 了解更多信息。

标签: java methods constructor copy


【解决方案1】:

您似乎不明白这些括号在图表中的哪一侧。 copy() 表示复制方法不带参数。这并不意味着它调用的所有方法或构造函数都不能发送参数;这些是 UML 图根本不包括的实现细节。 UML 图只是向您展示结构,它们不能替代实际代码。

该图正确显示只有一个构造函数,它需要 2 个参数。

copy 方法是一个实例方法(意思是,它可以访问字段),所以你只需写new FileName(name, extension)

不管它的价值如何,将它设计为一​​个可变对象在这个时代是边缘犯罪,所以从这个意义上说,这个 UML 图要么来自 20 年前的教程,要么是次优的。但这并不是您在 cmets 中所说的不正确。它准确地反映了一个可疑的设计选择。

【讨论】:

  • 哦,我现在明白了。你是对的,大学资料已经很过时了,我相信这个UML图是2014-2015年制作的。
猜你喜欢
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多