【问题标题】:Equal Method: Comparing 2 Objects相等方法:比较 2 个对象
【发布时间】:2012-02-13 19:29:40
【问题描述】:

我目前正在做一个 java 项目。我需要创建一个按名称比较两个项目的方法。我的第一个文件名为Item,它有一个名字。第二个文件的arrayListItems。我需要创建一个 equal 方法,根据它们的名称比较两个项目。我需要返回一个boolean 并且代码以此开头。

public boolean toEqual(Object o)

我对下一步该做什么感到困惑。我知道您可能必须使用 if else 语句以及我创建的 getName() 方法。但是我认为应该将对象转换为 Item 对象,但我不知道如何。任何人都可以提出任何建议吗?谢谢。

【问题讨论】:

    标签: java methods arraylist


    【解决方案1】:

    你是正确的,所以现在你只需要把它放在一起。

    http://www.javabeginner.com/learn-java/java-object-typecasting 该站点有一些关于在 Java 中转换对象的信息。基本上要将一个对象转换为另一个对象,您可以执行以下操作:

    Item i = (Item) o;
    

    这会将您的o 转换为Item

    接下来你需要看看i.getName().equals(getName())。您可以返回该结果,您应该完成:)

    祝你好运!

    【讨论】:

    • 不是i.getName() == getName()会做参考比较,而不是内容比较吗?假设名称是 String 类型或非原始类型,您不应该使用 i.getName().equals(getName()) 吗?
    • @blahman 你是对的。更新。我忘了这句话是 Java 而不是 C#
    【解决方案2】:

    你可以像这样投射物体 -

    (ClassName)obj 
    

    但是,更好的方法是覆盖 java.lang.Object 的 equals 和 hashcode 方法并在那里处理它。要知道如何正确覆盖它,可以参考这篇文章—— http://www.technofundo.com/tech/java/equalhash.html

    HTH, - 马尼什

    【讨论】:

      【解决方案3】:

      您应该为 item 类实现 boolean equals(Object)int hashCode(),因为这样您就可以简单地调用列表的 contains(Object) 方法来查找列表中是否存在匹配的项目。

      【讨论】:

        【解决方案4】:

        假设您有一个名为 Item 的类 您的 Item 类有一个名为 name 的实例字段,您可以使用它来存储项目的名称。

        class Item {
            private String name = "item name";
        
            public String getName() {
                return name
            }
        
            public boolean toEqual(Object o) {
                // Firstly cast it to Item
                Item item = (Item) o;
                // Then perform the compare
                return (name.equals(item.getName()));
            }
        }
        

        其实你可以把toEqual方法的签名改成 public boolean toEqual(Item o)。在这种情况下,您将不需要强制转换操作。

        public boolean toEqual(Item o) {
            // Perform the compare
            return (name.equals(o.getName()));
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多