Proposed spec is the following (in doc comments for javax.management.MXBean):
Sometimes the unmapped type T of a method parameter or return value in an MXBean must be represented as a string. If T is a non-generic type, this string is the value returned by Class.getName(). Otherwise it is the value of genericstring(T), defined as follows:
* If T is a non-generic non-array type, genericstring(T) is value returned by Class.getName(), for example "int" or "java.lang.String".
* If T is an array E, genericstring(T) is genericstring(E) followed by "". For example, genericstring(int) is "int", and genericstring(List<String>) is "java.util.List<java.lang.String>".
* Otherwise, T is a parameterized type such as List<String> and genericstring(T) consists of the following: the fully-qualified name of the parameterized type as returned by Class.getName(); a left angle bracket ("<"); genericstring(A) where A is the first type parameter; if there is a second type parameter B then ", " (a comma and a single space) followed by genericstring(B); a right angle bracket (">").
Note that if a method returns int, this will be represented by the string "[I" returned by Class.getName(), but if a method returns List<int>, this will be represented by the string "java.util.List<int>".
This is simpler than a full specification for all possible java.lang.reflect.Type objects, because not all such objects can arise here. For example, parameterized types can only have one or two parameters.