代码之家  ›  专栏  ›  技术社区  ›  Amy B

在“equals(T value)”中,不能是Object,也不能像City,等等?

  •  2
  • Amy B  · 技术社区  · 14 年前

    我在试着理解 equals()

    public class City
    {
        public boolean equals(Object other)
        {
            if (other instanceof City && other.getId().equals(this.id))
            {
                return true;
            }
    
            // ...
        }
    }
    

    这个方法必须是对象而不是城市吗?

    下面是不允许的吗?

    public class City
    {
        public boolean equals(City other)
        {
            if (other == null)
            {
                return false;
            }
    
            return this.id.equals(other.getId());
        }
    }
    
    3 回复  |  直到 9 年前
        1
  •  6
  •   Community Egal    4 年前

    是的,一定是 Object . 否则你就不是了 覆盖 这个 真实的 Object#equals() 是的。

    如果你只是超载,那么 不会 由标准API使用 Collection API 等等。

        2
  •  1
  •   irreputable    14 年前

    你可以两者兼得:(见上面poke的评论)

    public class City
    {
        public boolean equals(Object other)
        {
            return (other instanceof City) && equals((City)other) ;
        }
        public boolean equals(City other)
        {
            return other!=null && this.id.equals(other.getId());
        }
    }
    
        3
  •  0
  •   b_erb    14 年前

    Object 如果要重写equals()!