Явление называется тип данных. В данном случае эта функция возвращает хэш-таблицу с парами "ключ-значение": ключи - это "I", значения "O". Странность здесь в том, что это просто хэш-таблица, поэтому Вы можете обратиться к ее элементу вызвав ее ключ типа I, а не просто по номеру элемента как в обычном массиве.
parkito: и правда. Но тут просто из одномерной хеш-таблицы на лету делают многомерную. Правда я не могу объяснить как это может делаться на лету. Может еще какая-нибудь библиотека перегружает данные, в любом случае какая-то прокладка это делает, по одной строчке я ничего не могу конструктивного сказать. Но по любому суть тут в том, что тип данных как-то меняется на лету с O на I, O.
используется для того, чтоб за декларировать, что метод является generic-методом, перечисленные типы будут использоваться в сигнатуре, либо в теле метода.