有一个静态int类用于识别OO的对象良好实践吗?

时间:2014-03-13 17:42:01

标签: java

我有一个场景,其中有几个" Person"类和每个Person对象都有一个属性String" name"。

我的课程要求我有一个类,其中菜单列出每个Person对象的名称,用户可以输入名称,然后方法将搜索Person对象,其中" name" attribute等于用户输入的字符串。

现在,我的讲师说他将为创意编码实践提供额外的分数,我有一个想法,有一个名为" numberOfPersons"在Person类中,将在Person构造函数中递增。 " numberOfPersons"的值int被分配给名为" id"的额外属性。在构造函数中也是。

然后,当显示菜单时,它会显示一个列表,其中包含id和后面的名称。所以它就像..

  1. 萨利
  2. 约翰
  3. 鲍勃
  4. 然后询问用户的人员ID。我认为这是一个很好的做法,因为它输入的类型较少,它可以防止检查区分大小写的需要并减少拼写错误的机会。这样做有什么不对吗?我搜索过谷歌,但无法找到要搜索的内容。我的讲师希望看到创造性的编程技巧和良好的实践,这有什么多余的东西吗?

    感谢。

3 个答案:

答案 0 :(得分:1)

我想说在Person类中添加一个id会使Person类的抽象失败。因为它不符合人在生活中的任何身份。

由于Person对象不能具有相同的名称,因此您无法在处理过程中使用地图。

HashMap<String, Person> mapOfPersons = new HashMap<String, Person>()

然后您可以获取人名,它将返回相应的Person对象。现在您不再需要添加ID。

答案 1 :(得分:0)

  

......这有什么多余的吗?

根据您打印Person的方式,我假设您将对象存储在数组或某个索引集合中。如果是这样,那么您的id字段只是从数组/集合中的Person索引不断转换。因此,如果要求用户输入列表中的索引是id的唯一用途,那么它就是多余的。

答案 2 :(得分:0)

虽然我认为你的想法对于一门课程来说是好的,但总的来说static成员应该避免。在您的情况下,您有一个Person对象来代表每个人。但从概念上讲,整个人员数据库是一个重要的实体,它确实应该是它自己的对象。如果您有PersonDatabasePersonCollection类,numberOfPersons将是该类(或可能是方法)的(非静态)成员字段,您可以使用该类获取下一个ID而不是static字段。

顺便说一句,在菜单项之前输入数字并让用户输入数字是一种非常正常的做事方式,因为许多用户只有能够显示文本而不是图形的控制台。