Что такое PECS (продюсер продвигает Consumer Super)?

htmlentites

Эта функция идентична htmlspecialchars () всеми способами, кроме как с помощью htmlentites (), все символы, имеющие эквиваленты сущности HTML, переводятся в эти сущности.

Если вы хотите декодировать вместо этого (обратный), вы можете использовать html_entity_decode ().

blockquote>

Пример:

echo htmlentities("&"); // &

, если вы прямо делаете это в браузере, вы должны использовать:

encodeURIComponent(string input);

Пример:

encodeURIComponent($.trim($("input[name=t-tim_rendered-"+id+"]").val().toString()));

657
задан Lii 5 April 2016 в 14:59
поделиться

2 ответа

tl; dr: "PECS" с точки зрения коллекции. Если вы только извлекаете элементы из общей коллекции, это производитель, и вам следует использовать extends ; если вы набиваете только только , это потребитель, и вам следует использовать super . Если вы делаете и то, и другое с одной и той же коллекцией, вам не следует использовать extends или super .


Предположим, у вас есть метод, который принимает в качестве параметра набор вещей, но вы хотите, чтобы он был более гибким, чем просто принятие Collection .

Случай 1: Вы хотите просмотреть коллекцию и сделать что-нибудь с каждым предметом.
Тогда список - это производитель , поэтому вам следует использовать Collection .

Причина в том, что коллекция может содержать любой подтип Thing , и, таким образом, каждый элемент будет вести себя как Thing , когда вы выполняете свою операцию. (На самом деле вы не можете ничего добавить к Коллекции , потому что во время выполнения вы не можете узнать, какой конкретный подтип Thing содержит коллекция.)

Случай 2: Вы хотите добавить вещи в коллекцию.
Тогда список является потребителем , поэтому вам следует использовать Collection .

Причина здесь в том, что в отличие от Коллекция , Collection всегда может содержать Thing независимо от фактического параметризованного типа.Здесь вам все равно, что уже есть в списке, если это позволяет добавить Thing ; это что ? super Thing гарантирует.

791
ответ дан 22 November 2019 в 21:42
поделиться

Как я объясняю в свой ответ на другой вопрос, PECS - это мнемоническое устройство, созданное Джошем Блохом, чтобы помочь запомнить P производитель и расширяет , C на потребителе с выше .

Это означает, что при передаче параметризованного типа методу создаст экземпляров T (они будут извлечены из него каким-то образом), ? extends T следует использовать, поскольку любой экземпляр подкласса T также является T .

Когда параметризованный тип, передаваемый методу, потребляет экземпляров T (они будут переданы ему для выполнения каких-либо действий), ? super T следует использовать, потому что экземпляр T может быть законно передан любому методу, который принимает некоторый супертип T . Компаратор может использоваться, например, в Collection .? extends T не будет работать, потому что Comparator не может работать с Collection .

Обратите внимание, что обычно следует использовать только ? расширяет T и ? super T для параметров некоторого метода. Методы должны просто использовать T как параметр типа для универсального возвращаемого типа.

23
ответ дан 22 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

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