groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Scott Arnold <sca7...@bjc.org>
Subject RE: Non-Null Object Is Null
Date Wed, 13 Jul 2016 15:54:36 GMT
Regarding the toString(), that was a good suggestion for something to check.  Below is the
ICF class (I did trim some stuff out that the enterprise might not like me sharing), and it
does define a toString() method, but I don't think it can print just "Null" as coded and calling
getClass() wouldn't be throwing a NullPointerException, but it is.  

import java.io.Serializable
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder

class ICF implements Serializable {

    private static final long serialVersionUID = 1L

	boolean active
	String printName
	String code
	
	String toString() {
        return (new ToStringBuilder(this))
            .append("active", active)
            .append("printName", printName)
            .append("code", code)
            .toString()
	}

}

-----Original Message-----
From: OC [mailto:ocs@ocs.cz] 
Sent: Wednesday, July 13, 2016 10:27 AM
To: users@groovy.apache.org; Scott Arnold <sca7740@bjc.org>
Subject: Re: Non-Null Object Is Null

Scott,

I might be wrong, but it looks like your ICF returns a null toString -- your result can be
repeated e.g., by this code:

===
class Uhoh {
  String toString() { null }
}
def icf=new Uhoh()
System.out.println("is icf null? " + (icf == null)); System.out.println("is icf not null?
" + (icf != null)); System.out.println("what is icf? " + icf); ===

Trick is, toString() is what "print icf" implicitly does. To know more about the object, you
might try e.g.,

===
println "icf is some ${icf.getClass()}"
System.out.println("icf is some " + icf.getClass()); // about the same in Javaish ===

All the best,
OC

On 13. 7. 2016, at 17:01, Scott Arnold <sca7740@bjc.org> wrote:

> I'm new to Groovy (lots of Java experience but almost no Groovy experience) and maybe
there is something very basic I am missing here, but I am running into the following issue
in a Grails app (but I think it's a not understanding Groovy issue).  I'm not sure I can break
it down any further than I already have, so I am kind of stumped about what I am doing wrong
here.
> 
> In case you know Grails and want some detail on where this code is happening, I'm working
on a pre-existing Grails app that calls a service from the BootStrap.groovy during application
startup.  The code I'm having a problem with is within the service class.
> 
> Here's the code snippet:
> 
> System.out.println("is icf null? " + (icf == null)); 
> System.out.println("is icf not null? " + (icf != null)); 
> System.out.println("what is icf? " + icf);
> 
> And here's the output:
> 
> is icf null? false
> is icf not null? true
> what is icf? Null
> 
> If I try to call a method on icf, I get a NullPointerException.  However, earlier in
the code icf is created (currently it is created Java-style rather than using def, as in ICF
icf = new ICF()) and the code tries to set several property values within icf (e.g. icf.code
= suchandsuch) and none of that throws any errors.
> 
> What might be happening here?
> 
> Thanks.


Mime
View raw message