tl; dr: «PECS» находится с точки зрения коллекции. Если вы только вытаскиваете предметы из общей коллекции, это производитель, и вы должны использовать extends
; если вы загружаете только элементы, это потребитель, и вы должны использовать super
. Если вы делаете оба с одной и той же коллекцией, вы не должны использовать либо extends
, либо super
.
Предположим, что у вас есть метод, который принимает в качестве параметра набор вещей, но вы хотите, чтобы он был более гибким, чем просто принятие Collection<Thing>
.
Случай 1: вы хотите пройти коллекцию и делать вещи с каждым элементом. Затем список будет производителем, поэтому вы должны использовать Collection<? extends Thing>
.
. Поводом является то, что Collection<? extends Thing>
может содержать любой подтип Thing
, и поэтому каждый элемент будет вести себя как Thing
] при выполнении операции. (Фактически вы не можете добавить что-либо к Collection<? extends Thing>
, потому что во время выполнения вы не можете знать, какой подтип [] Thing
содержится в коллекции.)
Случай 2: вы хотите добавьте вещи в коллекцию. Затем список - это потребитель, поэтому вы должны использовать Collection<? super Thing>
.
. Здесь рассуждение состоит в том, что в отличие от Collection<? extends Thing>
, Collection<? super Thing>
всегда может удерживать Thing
независимо от того, какой фактический параметризованный тип является. Здесь вам все равно, что уже есть в списке, если он позволит добавить Thing
; это то, что гарантирует ? super Thing
.
На самом деле на 32-разрядных компьютерах слово является 32-разрядным, но тип DWORD является остатком с добрых старых времен 16-разрядных.
, Чтобы облегчить портировать программы на более новую систему, Microsoft решила, что все старые типы не изменят размер.
можно найти официальный список здесь: http://msdn.microsoft.com/en-us/library/aa383751 (По сравнению с 85) .aspx
Все зависимые типы платформы, которые изменились с переходом от 32-разрядного до 64-разрядного конца с _PTR (DWORD_PTR будет 32-разрядным в 32-разрядном Windows и 64-разрядным в 64-разрядном Windows).
Это определяется как:
typedef unsigned long DWORD;
Однако согласно MSDN:
На 32-разрядных платформах, долго синонимично с интервалом
Поэтому, DWORD составляет 32 бита в операционную систему на 32 бита. Существует отдельное, определяют для DWORD на 64 бита:
typdef unsigned _int64 DWORD64;
Hope, которая помогает.
Нет... на всех платформах Windows DWORD составляет 32 бита. LONGLONG или LONG64 используются для типов на 64 бита.