Java 使用类的静态int来标识对象对于OO来说是一个好的实践吗?

Java 使用类的静态int来标识对象对于OO来说是一个好的实践吗?,java,Java,我有一个场景,其中有几个“Person”类,每个Person对象都有一个属性字符串“name” 我的课程要求我有一个类,其中一个菜单列出每个Person对象的名称,用户可以输入一个名称,然后一个方法将搜索Person对象,其中“name”属性等于用户输入的字符串 现在,我的讲师说,他将对创造性的编码实践给予额外的分数,我有一个想法,在Person类中有一个名为“numberOfPersons”的静态int,它将在Person构造函数中递增。“numberOfPersons”int的值也被分配给构

我有一个场景,其中有几个“Person”类,每个Person对象都有一个属性字符串“name”

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

现在,我的讲师说,他将对创造性的编码实践给予额外的分数,我有一个想法,在Person类中有一个名为“numberOfPersons”的静态int,它将在Person构造函数中递增。“numberOfPersons”int的值也被分配给构造函数中名为“id”的额外属性

然后,当显示菜单时,它会显示一个带有id和名称的列表。所以这就像

  • 萨莉
  • 约翰
  • 鲍勃
  • 然后向用户询问个人id。我认为这是一个很好的做法,因为它可以减少输入,避免检查区分大小写的需要,并减少拼写错误的机会。这样做有什么不对吗?我在谷歌搜索过,但不太清楚该搜索什么。我的讲师想看看创造性编程技术和良好实践,这有什么多余的吗

    谢谢

    …这有什么多余的吗


    我假设,根据打印
    Person
    s的方式,将对象存储在数组或某个索引集合中。如果这是真的,那么您的
    id
    字段只是数组/集合中
    Person
    索引的一个常量移位。因此,如果向用户请求列表中的索引是
    id
    的唯一用途,那么它是多余的。

    我认为向Person类添加id会破坏Person类的抽象。因为它不符合这个人在生活中的任何身份

    由于Person对象不能具有相同的名称,因此没有理由不能在处理过程中使用映射

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

    然后,您可以输入人名,它将返回相应的person对象。现在你不必再添加Id了。

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


    顺便说一下,在我们使用GUI之前,将数字放在菜单项上并让用户输入数字是一种非常正常的做法,当时许多用户只有能够显示文本而不是图形的控制台

    如果你有很多人,而用户不知道身份证怎么办?我有两个搜索字段——一个是Id,一个是姓名——如果有多个人同名怎么办?一个人的
    Id
    与其存储在任何集合中的索引有何不同?Person构造函数中的搜索方法听起来有误。你是说个人课吗?为什么要抛出异常?我认为你的程序应该能够很好地处理这个问题,然后你可以将它们存储在一个地图中,其中键是名称。如果不可能有相同的名称,那么就不会有任何冲突,但是如果您有一个方法,该方法使用
    Person
    参数,并且您不知道索引,并且需要查找它,那么除了可能耗时的线性搜索外,您如何查找它呢?在对象中存储索引通常有充分的理由。