anchor.diff:      }
   
       public void run() {
  -        if (outer == null) {
  -            // -x option was not specified on command line; apply default values
  -            outer = new Outer();
  +        if (outer == null) { // -x option was not specified on command line
  +            // perform any logic that needs to happen if -x is missing
  +            outer = new Outer(); // apply default values
           }
  -        if (outer.inner == null) {
  -            // neither -a nor -b was specified; apply default for inner group
  -            outer.inner = new Inner();
  +        if (outer.inner == null) { // neither -a nor -b was specified
  +            // perform any logic that needs to happen if -a or -b is missing
  +            outer.inner = new Inner(); // apply defaults for inner group
           }
   
           // remaining business logic...
  
positive.code: class MyGroup {
      // (group options):
      // specify default values both in the annotation and in the initial value
      @Option(names = "-x", defaultValue = "XX") String x = "XX"; // yes, some duplication :-(
  }
  ----
  
  
  Next, the application needs to manually instantiate the `@ArgGroup`-annotated field.
  There is a trade-off:
  
negative.code:     }
  
      override fun run() {
          if (outer == null) { // -x option was not specified on command line
              // perform any logic that needs to happen if -x is missing
              outer = Outer(); // apply default values
          }
          if (outer.inner == null) { // neither -a nor -b was specified
              // perform any logic that needs to happen if -a or -b is missing
              outer.inner = Inner(); // apply defaults for inner group
          }
  
          // remaining business logic...
  