Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
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 codeObject/code argument. * * @param obj an codeObject/code. * @return if the argument is codenull/code, then a string equal to * codenull/code; otherwise, the value of * codeobj.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=739577view=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=739577r1=739576r2=7 39577view=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
Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
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 codeObject/code argument. * * @param obj an codeObject/code. * @return if the argument is codenull/code, then a string equal to * codenull/code; otherwise, the value of * codeobj.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=739577view=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=739577r1=739576r2=7 39577view=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
Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
What JDK/JRE is that? The Sun Java6 API doc still says it should return null. Whatta bitch. -Matt --- Martijn Kruithof j...@kruithof.xs4all.nl wrote: 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=739577view=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/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=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
AW: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
Very curious ... Source of String.valueOf(Object) from JDK 1.4.2_15 /** * Returns the string representation of the codeObject/code argument. * * @param obj an codeObject/code. * @return if the argument is codenull/code, then a string equal to * codenull/code; otherwise, the value of * codeobj.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=739577view=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=739577r1=739576r2=7 39577view=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
Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
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=739577view=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/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=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
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=739577view=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/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=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