如何使用对象的类变量在Java中标识对象?

时间:2018-07-18 13:55:49

标签: java

我创建了一个类,并从中创建了57个对象,每个对象都有特定的ID号。

我可以创建一个使用ID作为参数返回对象的方法吗?

例如,假设我的班级名称为Things,并从该类中创建了两个对象,分别为appledog,它们具有ID 1和{{1 }}。

2

Things.java

class Things { private String name; private int ID; public Things(String name, int ID) { this.name = name; this.ID = ID; } }

Main.java

在此示例中,我想在“事物”类中创建一个方法,如果我使用1作为参数,则返回对象apple,如果我使用2作为参数,则返回对象dog。

3 个答案:

答案 0 :(得分:3)

除非将其存储在特殊的存储库中,否则无法通过特定属性来标识对象

您可以创建一个ThingRepository,并可以通过ID获得特定的Things

public class ThingRepository {
   private Map<Integer, Things> thingsRepository = new HashMap<>();

   public void addThing(int id, Things things) {
      thingsRepository.put(id, things);
   } 
   public Things getThingById(int id) {
       return thingsRepository.get(id); //Can return null if not present
   }
}

addThing方法无需显式采用id。如果将吸气剂添加到Things,则可以简化为

public void addThing(Things things) {
    thingsRepository.put(things.getId(), things);
} 

您需要解决的问题:

  1. 必须以某种方式将每个创建的Things对象添加到其中(调用者需要添加,或者必须有其他包装器/工厂必须这样做)。
  2. 一旦不需要Things,必须将其从上图中删除,否则可能导致内存泄漏。

顺便说一句,Things不应仅被命名为Thing吗?

答案 1 :(得分:1)

此处有两个方面:

  • 您需要某种数据结构,该结构可以记住创建的对象,并允许您通过id(例如简单的Map<Integer, Things>)访问它们。每次创建一个新的Things(应该叫Thing,不是吗?!),您都去thatMap.put(newId, newThing)
  • 如果您希望数据“生存”,则必须以某种方式持久化(例如将数据写入文件,数据库等)

答案 2 :(得分:0)

例如,如果您使用Intellij,请按:alt + insert,然后选择getters / setter。

如果不只是编写自己的getter / setter;)。

就像这里:https://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html

但是基本上,如果要查找具有特定ID的Thing,则需要将它们存储在例如ArrayList中的某个位置,然后对其进行迭代,并且如果带有该ID的find元素只需将其返回即可。

1)创建新的ArrayList

2)遍历

3)如果找到想要的带有ID的事物,请将其退回。