Extensibility mechanisms
For external Java objects, the mapping from Java class names to XPath type names in namespace
        http://saxon.sf.net/java-type has been refined. The convention that a "$"
      character in the Java class name is replaced by a hyphen ("-") in the XPath name is now
      applied systematically (previously, it was only applied on some code paths). A new convention
      is introduced allowing array types to be represented: any "[" at the start of the Java class
      name is replaced by "_-" (underscore then hyphen). So for example the QName representing the
      Java class byte[] (binary name [B) is now
        Q{http://saxon.sf.net/java-type}_-B, while byte[][] (binary name
        [[B) becomes Q{http://saxon.sf.net/java-type}_-_-B.
For reflexive extension functions, a new scheme involving generics is available to allow more
      precise type checking, corresponding more closely to the way that native (XSLT or XQuery)
      function calls work. The arguments of a method can now be declared for example as
        ZeroOrMore<IntegerValue>, OneOrMore<NodeInfo>,
        ZeroOrOne<StringValue>, or One<BooleanValue> to indicate
      both the expected item type and the cardinality. When arguments or result are described using
      this notation, the function conversion rules operate exactly as for native function calls.