Подтвердить что ты не робот

Что такое Java-эквивалент шаблонов С++?

Что такое Java-эквивалент шаблонов С++?

Я знаю, что есть интерфейс под названием Template. Связано это?

4b9b3361

Ответ 1

Templates, как в С++, не существует в Java. Наилучшее приближение generics.

Одно огромное различие заключается в том, что в С++ это законно:

<typename T> T sum(T a, T b) { return a + b; } 

В Java нет эквивалентной конструкции. Лучшее, что вы можете сказать,

<T extends Something> T Sum(T a, T b) { return a.add(b); }

где Something имеет метод, называемый add.

В С++ происходит то, что компилятор создает скомпилированную версию шаблона для всех экземпляров шаблона, используемого в коде. Таким образом, если мы имеем

int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);

тогда компилятор С++ скомпилирует версию sum для int и версию sum для double.

В Java существует понятие erasure. Что происходит, так это то, что компилятор удаляет все ссылки на параметры типового типа. Компилятор создает только одну скомпилированную версию кода независимо от того, сколько раз он используется с разными параметрами типа.

Другие различия

Ответ 2

В Java нет реальных шаблонов. Шаблоны С++ - это объекты времени компиляции, которые используются для генерации классов. Во время выполнения их нет.

В Java существуют параметризованные типы как часть механизма, называемого generics. Он служит аналогичной цели, но существенно отличается в том, как он работает и его последствия. Он имеет некоторое представление во время выполнения, есть определенные правила и т.д.

Начните с чтения учебника Java, затем прочитайте Bloch Effective Java для подробного описания оговорок, если вы хотите быть "мощным пользователем" ".

Ответ 4

В Java есть дженерики, которые похожи, но не точно такие же, как шаблоны. Я не знаю, что такое интерфейс Template, но он не имеет ничего общего с шаблонами С++.

Ответ 5

В java нет механизма сборки в шаблоне. Вместо этого у них есть дженерики. Кроме того, у ides есть что-то, называемое шаблонами кода, например. для eclipse.

Ответ 6

Вам действительно не нужны шаблоны в Java. Шаблоны в основном полезны, когда вам нужно иметь совершенно разные типы в качестве параметра, о котором вы ничего не знаете. В Java все объекты являются виртуальными и наследуются от одного корневого объекта, а примитивные типы определяются гораздо отчетливее и отбрасывают работу более чувственно, поэтому на самом деле нет смысла в этом.

Вы можете получить лучшую производительность с помощью шаблонов стиля С++, но из-за того, что они генерируют гораздо больше кода, а высокая скорость процессора все больше и больше превышает скорость доступа к данным с каждым годом, это становится все меньше и меньше, особенно когда дело доходит до объекты в отличие от примитивов.