Я не думаю, что есть способ устранить неоднозначность с параметром типа, и я думаю, что это было разумное дизайнерское решение.
- Соглашения ясны, что параметры типа должны быть, если возможно, длиной в один символ, и оборотной стороной этого является то, что другие классы не должны иметь имен из одного символа.
- Если выЕсли бы у вас была возможность устранения неоднозначности, , тогда у вас была бы возможность переименовать параметр типа
X
в Bar<X>
.Другими словами, если бы у вас была возможность сказать foobar(TypeParameter.X t)
, у вас была бы возможность просто использовать что-то отличное от X
для параметра типа в Bar
.Переименование X
- это способ, которым вы избегаете столкновений имен.
Не забывайте, что имена параметров типов не просачиваются в другие классы более чем тривиальными способами.Вы никогда не будете вынуждены использовать определенное имя параметра типа , никогда.Поэтому имеет смысл, что разработчики языка не подумали, что для этого стоит добавить сложность к языку.