Что такое Овеществленные Дженерики? Как они решают проблемы Стирания Типа и почему они не могут быть добавлены без существенных изменений?

Проблема от клиента

{"{:class=>\"notes\", :ckeditor=>{:language=>\"us\"}}"=>"<p>test test<strong>setset<em>testste</em></strong></p>\r\n"}

выглядит очень странно, потому что это ключ "{:class=>\"notes\", :ckeditor=>{:language=>\"us\"}}" для доступа к нужному вам значению! я думаю, что вам нужно проверить на стороне клиента, почему он так отправляет

68
задан Simon Morgan 8 July 2015 в 12:39
поделиться

3 ответа

Все дело в том, что обобщенные универсальные шаблоны имеют поддержку в компиляторе для сохранения информации о типах, тогда как универсальные шаблоны со стиранием типа - нет. AFAIK, весь смысл стирания типа в первую очередь состоял в том, чтобы обеспечить обратную совместимость (например, JVM с более низкой версией все еще могли понимать универсальные классы).

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

36
ответ дан 24 November 2019 в 14:22
поделиться

IIRC (и на основе ссылки), обобщенные шаблоны Java - это просто синтаксический сахар для существующей техники использования коллекции объектов и преобразования взад и вперед. Безопаснее и проще использовать универсальные шаблоны Java, поскольку компилятор может выполнять проверки за вас, чтобы убедиться, что вы поддерживаете безопасность типа compile -time. Однако время выполнения - совсем другая проблема.

Дженерики .NET, с другой стороны, фактически создают новые типы - List в C # - это другой тип, чем List . В Java, по сути, это одно и то же - List . Это означает, что если у вас есть по одному из каждого, вы не можете посмотреть на них во время выполнения и увидеть, как они были объявлены - только то, что они есть сейчас.

Реифицированные дженерики изменили бы это предоставляя разработчикам Java те же возможности, которые сейчас существуют в .NET.

12
ответ дан 24 November 2019 в 14:22
поделиться

Я не эксперт по этому вопросу, но насколько я понимаю информация о типе теряется во время компиляции. В отличие от C ++, Java не использует систему шаблонов, безопасность типов полностью обеспечивается компилятором. Во время выполнения

4
ответ дан 24 November 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: