anchor.diff:  
   NOTE: Java 8 lambdas make it easy to register custom converters:
   
  -[source,java]
  +.Java
  +[source,java,role="primary"]
   ----
   CommandLine cl = new CommandLine(app);
   cl.registerConverter(Locale.class, s -> new Locale.Builder().setLanguageTag(s).build());
   cl.registerConverter(Cipher.class, s -> Cipher.getInstance(s));
   ----
   
  +.Kotlin
  +[source,java,role="secondary"]
  +----
  +val cl = CommandLine(app)
  +cl.registerConverter(Locale::class.java) {
  +    s: String? -> Locale.Builder().setLanguageTag(s).build()
  +}
  +cl.registerConverter(Cipher::class.java) {
  +    Cipher.getInstance(it)
  +}
  +----
  +
   After registering custom converters, call the `execute(String...)` or `parseArgs(String...)` method on the `CommandLine` instance where the converters are registered. (The static `populateCommand` method cannot be used.) For example:
   
  -[source,java]
  +.Java
  +[source,java,role="primary"]
   ----
   class App {
       @Parameters java.util.Locale locale;
  
positive.code: class Git : Runnable {
  
      @Option(names = ["--git-dir"], description = ["Set the path to the repository."])
      lateinit var gitDir : File
  }
  ----
  
  
negative.code: }
  ----
  
  .Kotlin
  [source,kotlin,role="secondary"]
  ----
  class App {
      @Option(names = ["--big"], type = [BigDecimal::class]) // concrete Number subclass
      lateinit var big: Array<Number> // array type with abstract component class
  
      @Option(names = ["--small"], type = [Short::class]) // other Number subclass
      lateinit var small: Array<Number>
  
      @Parameters(type = [StringBuilder::class]) // StringBuilder implements CharSequence
      lateinit var address: CharSequence // interface type
  }
  ----
  
  ==== Maps and Collections with Abstract Elements
  For raw maps and collections, or when using generics with unbounded wildcards like `Map<?, ?>`, or when the type parameters are themselves abstract classes like `List<CharSequence>` or `Map<? extends Number, ? super Number>`, there is not enough information to convert to a stronger type. By default, the raw String values are added as is to such collections.
  
  The `type` attribute can be specified to convert to a stronger type than String. For example:
  
  .Java
  [source,java,role="primary"]
  ----
  class TypeDemo {
      @Option(names = "-x")  // not enough information to convert
  