Hi,

Marek Kozieł wrote:
>> +    public static boolean equals(Object a, Object b) {
>> +        return (a == b) || (a != null && a.equals(b));
>> +    }
>
> Hello,
> I would suggest other implementation of equals method:
>
>    public static boolean equals(Object a, Object b) {
>            if (a == null) return (b == null ? true : b.equals(null));
>            if (b == null) return a.equals(null);
>            return a.equals(b);
>    }
>
> This one could cover case when null is considered as object in object
> equals method [...]

An equals implementation that can return true when its argument is null 
violates its contract since
it is not symmetric.  In fact, the spec of Object.equals specifically says that 
the method must
return false when the argument is null.

Regards,
Éamonn McManus · JMX Spec Lead · http://weblogs.java.net/blog/emcmanus


Marek Kozieł wrote:
2009/10/8 Joseph D. Darcy <joe.da...@sun.com>:
Hello.

Please code review the first-round of java.util.Objects; the patch is below:
http://cr.openjdk.java.net/~darcy/6797535.0/

-Joe

--- old/make/java/java/FILES_java.gmk   2009-10-08 11:04:03.000000000 -0700
+++ new/make/java/java/FILES_java.gmk   2009-10-08 11:04:02.000000000 -0700
@@ -258,6 +258,7 @@
   java/util/ServiceConfigurationError.java \
   java/util/Timer.java \
   java/util/TimerTask.java \
+    java/util/Objects.java \
   java/util/UUID.java \
   java/util/concurrent/AbstractExecutorService.java \
   java/util/concurrent/ArrayBlockingQueue.java \
--- /dev/null   2009-07-06 20:02:10.000000000 -0700
+++ new/src/share/classes/java/util/Objects.java        2009-10-08
11:04:03.000000000 -0700
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License
version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package java.util;
+
+/**
+ * This class consists of {...@code static} utility methods for operating
+ * on objects.  These utilities include {...@code null}-safe or {...@code
+ * null}-tolerant methods for computing the hash code of an object,
+ * returning a string for an object, and comparing two objects.
+ *
+ * @since 1.7
+ */
+public class Objects {
+    private Objects() {
+        throw new AssertionError("No java.util.Objects instances for
you!");
+    }
+
+    /**
+     * Returns {...@code true} if the arguments are equal to each other
+     * and {...@code false} otherwise.
+     * Consequently, if both arguments are {...@code null}, {...@code true}
+     * is returned and if exactly one argument is {...@code null}, {...@code
+     * false} is returned.  Otherwise, equality is determined by using
+     * the {...@link Object#equals equals} method of the first
+     * argument.
+     *
+     * @return {...@code true} if the arguments are equal to each other
+     * and {...@code false} otherwise
+     * @see Object#equals(Object)
+     */
+    public static boolean equals(Object a, Object b) {
+        return (a == b) || (a != null && a.equals(b));
+    }

Hello,
I would suggest other implementation of equals method:

        public static boolean equals(Object a, Object b) {
                if (a == null) return (b == null ? true : b.equals(null));
                if (b == null) return a.equals(null);
                return a.equals(b);
        }

This one could cover case when null is considered as object in object
equals method, while in not time implementation result might depend
from arguments order:

        class Boo {
                public String   data;

                @Override
                public boolean equals(Object obj) {
                        if (obj == null) return (data == null);//
                        ...
                }
        }



Reply via email to