Kevin Bourrillion wrote:
-1 on reflection-based stuff in the Objects class.
equal() and hashCode() are the only two things we saw fit to include
in our Objects class, and actually, our hashCode() is identical to
Arrays.hashCode() (but is varargs).
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Objects.html
Hmm, java.util.Arrays.{hashCode, deepHashCode} could be changed to be
var-args methods in JDK 7. Possibly the toString methods on Object[]
would benefit from being var-args too.
Please do add the compare() methods to all the rest of the wrapper
types; we would use those a lot.
I was considering putting all the compare/compareTo methods for
primitives in one class; that way the type of the operands doesn't have
to be expressed in a typically call site.
When it comes to cloning, I tried very hard once to provide something
useful -- a "clone any object without knowing its concrete type"
method -- and it was a disaster. A total mess of reflection, and no
one wanted to use it anyway. Cloning in Java is discredited.
So I'm left with only equal() for your new Objects class. By the way,
the best implementation is a == b || (a != null && a.equals(b)).
Thanks for the tip,
-Joe
On Wed, Sep 9, 2009 at 2:22 PM, Andrew John Hughes
<gnu_and...@member.fsf.org <mailto:gnu_and...@member.fsf.org>> wrote:
2009/9/9 Joe Darcy <joe.da...@sun.com <mailto:joe.da...@sun.com>>:
> Hello.
>
> For JDK 7, I think it is high-time the platform included a class
like
> java.util.Objects to hold commonly-written utility methods. For
example, a
> two-argument static equals method that returned true if both
arguments are
> null, returns false is one argument is null, and otherwise
returns the
> result of calling arg1.equals(arg2) (6797535 "Add shared two
argument
> static equals method to the platform").
>
> A static hashCode method returning 0 for null and the value of
> arg.hashCode() has also been suggested.
>
> A set of
>
> static int compareTo(int, int)
> static int compareTo(long, long)
> ....
>
> methods probably belongs somewhere in the platform too.
>
> What other utility methods would have broad enough use and
applicability to
> go into a common java.util class?
>
> -Joe
>
Given you've listed utility methods for two Object methods, equals and
hashCode, toString seems an obvious one to handle as well:
public static String toString(Object o)
throws IllegalAccessException
{
Class<?> c = o.getClass();
StringBuilder b = new StringBuilder(c.getName());
b.append("[");
for (Field f : c.getDeclaredFields())
{
f.setAccessible(true);
b.append(f.getName() + "=" + f.get());
b.append(",");
}
b.replace(b.length() - 1, b.length(), "]");
return b.toString();
}
Maybe there's also a useful utility implementation of clone too, but I
can't think of one offhand.
--
Andrew :-)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net
PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint: F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8
--
Kevin Bourrillion @ Google
internal: http://go/javalibraries
google-collections.googlecode.com
<http://google-collections.googlecode.com>
google-guice.googlecode.com <http://google-guice.googlecode.com>