Сцена:
Когда два параметра следующим перегруженной функции
аннулируются FUNC (Map <Integer, String> карта) {}
аннулируются FUNC (Map <Integer, List <String >> Карта) {}
IDE сообщит об ошибке компиляции: оба метода имеет же стирание
Ответ:
Поскольку Java дженериков после удаления типа во время компиляции, эти методы станут
аннулируются FUNC (Карта Карта)
Запрос немного, есть несколько понятий, необходимых для понимания и мастеров.
https://www.jianshu.com/p/f9da328c91be
Шаблон отличается от Java генериков в C ++: Java генериков является «тип стирания», шаблоны C ++ являются «овеществленная родовое» .
- тип стирания: общий тип существует только во время компиляции, компилируется байт-код не содержит общую информацию и работает, все карты к тому же родовому типа один байт-код.
- овеществленный родовой: универсальный тип присутствует во время компиляции и времени выполнения, компилятор автоматически генерирует общий тип для каждого типа кода и компилируются в двоичный код.
Характер типа стирания
общие (XXX распространяется?) -> Компилятор (тип стирания) -> Оригинальный типа (Т XXX в качестве альтернативы)
исходный тип относится к общей информация стирается после того, как компилятор, типа конкретного типа переменных байт - код.
в результате ограничений универсального типа стирания
Уменьшение общего типа стирание обобщения, некоторые важные контексты общего тип не может быть использован, с некоторыми ограничениями.Неявное преобразование типа во время выполнения накладных расходов: использование дженериков, Java компилятор автоматически генерирует код, чтобы помочь нам преобразование типов, которое по отношению к C ++ шаблон, несомненно, приносит дополнительные накладные расходы на производительность.
Перегруженные сигнатуры методов конфликта
Класс не может быть достигнут с двумя вариантами общего интерфейса
https://blog.csdn.net/abc_12366/article/details/79177328
https://blog.csdn.net/weixin_34121282/article/details/88535522 карте Дженерики