Quick correction: `name` or `canonicalName` or `simpleName` cannot be used 
directly in static scopes.  You will get "Groovy:Apparent variable 
'canonicalName' was found in a static scope but doesn't refer to a local 
variable, static field or class."

However, you can use `getName()` or `getCanonicalName()` or `getSimpleName()` 
etc. directly or `this.name` or `this.canonicalName` or ... as you stated in 
your original message.


Two funny thing about all this:
class A { static { this; super } } // "this" here is Class<A> and "super" here 
is Object -- Should it be Class<Object>?
class B extends A { static { this; super } } // "this" here is Class<B> and 
"super" here is Class<A>

class B extends A { static {
  def closure = {
    this; super // "this" here is Class<B> and "super" here is Class<B> -- 
Should it be Class<A>?
  }
}}

From: Milles, Eric (TR Technology & Ops)
Sent: Monday, November 06, 2017 11:59 AM
To: [email protected]
Subject: RE: `this` in static context

You should be able to call `name` or `canonicalName` or `simpleName` directly 
if there are no static methods in the class or its supers that would take 
precedence.

```
class LongClassName {
  private static Logger log = Logger.getLogger(name)
  private static Logger log = Logger.getLogger(this) // another possibility for 
frameworks that accept a class instance for logger namespacing
}
```
-- although this particular case has been much simplified by @Log, et al.

Reply via email to