为了账号安全,请及时绑定邮箱和手机立即绑定

java中如何使用对象的类变量来识别对象?

java中如何使用对象的类变量来识别对象?

一只名叫tom的猫 2021-05-31 17:10:22
我创建了一个类并从中制作了 57 个对象,每个对象都有特定的 ID 号。我可以创建一个使用 ID 作为参数返回对象的方法吗?例如,假设我的类的名称是Things,我从中创建了两个名为appleand 的对象dog,它们具有 ID1和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:class Main {    public static void main(String[] args) {        Things apple = new Things("apple", 1);        Things dog = new Things("dog", 2);    }}在这个例子中,我想在类“Things”中创建一个方法,如果我使用 1 作为参数,则返回对象 apple ,如果使用 2 则返回对象 dog 。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

您无法通过特定属性识别对象,除非您将其存储在特殊存储库中


您可以创建一个ThingRepository并且可以Things通过 id获取特定信息。


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. 如果你添加一个 getter 到Things,那么它可以简化为


public void addThing(Things things) {

    thingsRepository.put(things.getId(), things);

您需要解决的几个问题:


每个创建的Things对象都必须以某种方式添加到这里(调用者需要添加或者必须有其他一些包装器/工厂必须这样做)。

一旦Things不需要 a ,就必须将其从上面的映射中删除,否则会导致内存泄漏。

顺便说一句,不应该Things只命名为Thing?


查看完整回答
反对 回复 2021-06-02
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这里有两个方面:

  • 您需要某种数据结构来记住创建的对象,并允许您通过 id 访问它们,例如一个简单的Map<Integer, Things>. 每次你创建一个新的Things(最好被称为Thing,不是吗?!),你去thatMap.put(newId, newThing)

  • 如果您希望该数据“幸存”,则必须以某种方式将其持久化(例如将数据写入文件、数据库等)


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信