Небезопасен ли пакет gcc __attribute __ ((упакованный)) / #pragma pack?

Используйте следующее:

Msg> someMsg = strMsg;

Проблема в том, что ? в Msg> objMsg является NOT , способным преобразовать захват. Это не «f6] из Value из типа . Это« Msg из Value типа ЛЮБОЙ ».

Это также объясняет, почему вместе с изменением объявления я также переименовал переменную в someMsg. Value не может быть просто Object. Он должен принадлежать некоторым типу (String в этом примере).


Более общий пример

Рассмотрим более общий пример List>. Аналогично исходному сценарию a List> can NOT capture-convert a List>.

    List> lolInt = null;

    List> lolAnything = lolInt;         // DOES NOT COMPILE!!!
    // a list of "lists of anything"

    List> lolSomething = lolInt;   // compiles fine!
    // a list of "lists of something"

Вот еще один способ взглянуть на это:

  • Java generics is (g16) Integer - Number , но List< Integer > не является List< Number > Аналогичным образом, List может быть захвачен захватом с помощью List , но List< List > не является List< List >
  • Использование ограниченного шаблона , List Number > может захватывать-преобразовать a List< Integer > S аналогично List List > может захватывать-преобразовать List< List >

Тот факт, что некоторые ? могут захватить и другие, также не может объяснить следующий фрагмент:

    List> lolAnything = new ArrayList>(); // compiles fine!

    List listSomething = new ArrayList(); // DOES NOT COMPILE!!!
        // cannot instantiate wildcard type with new!

Связанные вопросы

См. также

145
задан BattleTested 23 August 2018 в 06:08
поделиться