Thanks, Archie!  So String.valueOf((Object) null)
would do it.  Or "null".  ;)

-Matt

--- Archie Cobbs <archie.co...@gmail.com> wrote:

> Disassembling the class file shows this:
> 
> String.valueOf(null)
>   -> INVOKESTATIC
> java/lang/String.valueOf:([C)Ljava/lang/String;
> 
> String.valueOf((Object)null)
>   -> INVOKESTATIC
>
java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
> 
> In the case of an ambiguous method call, the
> compiler chooses the most
> specific one. In this case, char[] is a subclass of
> Object, so char[] is
> chosen.
> 
> But if there is no "most specific" one then the
> compiler gives an ambiguous
> method call error.
> 
> For example, compile these two classes to see the
> difference:
> 
> Works:
> 
> public class Null {
>     Null() { foobar(null); }         // char[]
> variant most specific
>     static void foobar(char[] x) { }
>     static void foobar(Object x) { }
> }
> 
> Fails:
> 
> public class Null {
>     Null() { foobar(null); }          // compiler
> error
>     static void foobar(char[] x) { }
>     static void foobar(String x) { }
> }
> 
> Pretty tricky...
> 
> -Archie
> 
> On Mon, Feb 2, 2009 at 12:31 AM,
> <jan.mate...@rzf.fin-nrw.de> wrote:
> 
> > Very curious ...
> >
> > Source of String.valueOf(Object) from JDK 1.4.2_15
> >
> >    /**
> >     * Returns the string representation of the
> <code>Object</code>
> > argument.
> >     *
> >     * @param   obj   an <code>Object</code>.
> >     * @return  if the argument is
> <code>null</code>, then a string equal to
> >     *          <code>"null"</code>; otherwise, the
> value of
> >     *          <code>obj.toString()</code> is
> returned.
> >     * @see     java.lang.Object#toString()
> >     */
> >    public static String valueOf(Object obj) {
> >        return (obj == null) ? "null" :
> obj.toString();
> >    }
> >
> >
> > The same for JDK 1.6.0_10
> >
> >    public static String valueOf(Object obj) {
> >        return (obj == null) ? "null" :
> obj.toString();
> >    }
> >
> >
> > But indeed:
> > Java 1.3.0-C     : NPE
> > Java 1.4.2_15-b02: NPE
> > Java 1.5.0_12-b04: NPE
> > Java 1.6.0_02-b05: NPE
> >
> > If I add a cast then it works
> >    System.out.println(String.valueOf( (Object)null
> ));
> >
> > So the compiler must bind that to another method
> than
> > String.valueOf(Object) ...
> >
> >
> > But of course, simply returning "null" is much
> easier ;)
> >
> >
> >
> > Jan
> >
> >
> >
> > > -----Ursprüngliche Nachricht-----
> > > Von: Martijn Kruithof
> [mailto:j...@kruithof.xs4all.nl]
> > > Gesendet: Samstag, 31. Januar 2009 22:14
> > > An: Ant Developers List
> > > Betreff: Re: svn commit: r739577 -
> > >
>
/ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
> > >
> > > Doubted it, checked it and it returned
> NullPointerException.
> > >
> > > D:\>type Test.java
> > > public class Test
> > > {
> > > public static void main(String[] args)
> > > {
> > > System.out.println(String.valueOf(null));
> > > }
> > > }
> > >
> > > D:\>java Test
> > > Exception in thread "main"
> java.lang.NullPointerException
> > >         at java.lang.String.<init>(Unknown
> Source)
> > >         at java.lang.String.valueOf(Unknown
> Source)
> > >         at Test.main(Test.java:6)
> > >
> > > br Martijn
> > >
> > > Matt Benson schreef:
> > > > I always thought String.valueOf(null) returned
> "null".
> > > >  Was I on crack?
> > > >
> > > > -Matt
> > > >
> > > > P.S.  Good to see you committing, Martijn...
> > > >
> > > > --- j...@apache.org wrote:
> > > >
> > > >
> > > >> Author: jkf
> > > >> Date: Sat Jan 31 17:10:50 2009
> > > >> New Revision: 739577
> > > >>
> > > >> URL:
> > > >>
> http://svn.apache.org/viewvc?rev=739577&view=rev
> > > >> Log:
> > > >> Original toString would always throw a NPE.
> > > >>
> > > >> Modified:
> > > >>
> > > >>
> > > >>
> > > >
> > >
>
ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
> > > >
> > > >> Modified:
> > > >>
> > > >>
> > > >
> > >
>
ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
> > > >
> > > >> URL:
> > > >>
> > > >>
> > > >
> > >
>
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apach
> > >
>
e/tools/ant/property/NullReturn.java?rev=739577&r1=739576&r2=7
> > 39577&view=diff
> > > >
> > > >
> > >
>
==============================================================
> > > ================
> > > >
> > > >> ---
> > > >>
> > > >>
> > > >
> > >
>
ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
> > > >
> > > >> (original)
> > > >> +++
> > > >>
> > > >>
> > > >
> > >
>
ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
> > > >
> > > >> Sat Jan 31 17:10:50 2009
> > > >> @@ -33,6 +33,6 @@
> > > >>       * {...@inheritdoc}
> > > >>       */
> > > >>      public String toString() {
> > > >> -        return String.valueOf(null);
> > > >> +        return "null";
> > > >>      }
> > > >>  }
> > > >>
> > > >>
> > > >>
> > > >>
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
>
---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:
> dev-unsubscr...@ant.apache.org
> > > > For additional commands, e-mail:
> dev-h...@ant.apache.org
> > > >
> > > >
> > >
> > >
> > >
>
---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> dev-unsubscr...@ant.apache.org
> > > For additional commands, e-mail:
> dev-h...@ant.apache.org
> > >
> > >
> >
> >
>
---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> dev-unsubscr...@ant.apache.org
> > For additional commands, e-mail:
> dev-h...@ant.apache.org
> >
> >
> 
> 
> -- 
> Archie L. Cobbs
> 



      

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to