Что такое инициализация Двойных фигурных скобок в Java?

https://docs.microsoft.com/en-us/windows/communitytoolkit/extensions/listviewbase

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

Но вы можете легко расширить ListView в шаблонное управление и, следовательно, более легкий доступ к модели представления, в которой находится ваш источник предметов, с этого момента вы можете изменить

 private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)

, где происходит вся магия.

Обозначение для реализации

Примечание 0:

, если вы не знаете mvvm и связывание, забудьте о том, что вы когда-либо читали это, и изучайте его.

Примечание 1:

Все дочерние элементы управления, которые не имеют явно определенного контекста данных, наследуют своих родителей.

Примечание 2:

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

Примечание 3:

Чтобы преобразовать это в шаблонный / настраиваемый элемент управления, вам придется в значительной степени создать собственную реализацию ListView, например, MyListview: ListView

Свойства зависимости должны Чтобы преобразовать их в обычные, просто введите «propdp» и дважды нажмите «Tab», чтобы открыть шаблон по умолчанию.

Вам все равно придется ссылаться на все различные DataTamplates из XAML, как это показано в приведенном ниже демонстрационном приложении.

Примечание 4:

Отрезать провисание, которое, например, для демонстрационного кода, направления растяжения и полос зебры не требуется.

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ListViewExtensions.cs

это точное расположение фрагмента кода, о котором я говорил, чтобы проверить его в действии и поиграть с ним, загрузите «Windows Community Toolkit» из магазина, оно находится в разделе «Расширения».

279
задан Andrew Tobilko 1 June 2016 в 00:48
поделиться

5 ответов

Инициализация двойной скобки создает анонимный класс, производный от указанного класса (внешние скобки), и обеспечивает блок инициализации внутри этого класса (внутренние скобки). Например,

new ArrayList<Integer>() {{
   add(1);
   add(2);
}};

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

.
273
ответ дан 23 November 2019 в 02:01
поделиться

Первая фигурная скобка создает новый Анонимный класс, и второй набор фигурной скобки создает экземпляр инициализаторы как статический блок.

Как другие указали, не безопасно использовать.

Однако можно всегда использовать эту альтернативу для инициализации наборов.

  • Java 8
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
  • Java 9
List<String> list = List.of("A", "B", "C");
0
ответ дан 23 November 2019 в 02:01
поделиться

Похоже, это то же самое, что и с ключевым словом, столь популярным во flash- и vbscript. Это метод изменения того, что это и ничего больше.

-1
ответ дан 23 November 2019 в 02:01
поделиться

Это - среди прочего - ярлык для инициализации коллекций. Узнайте больше ...

4
ответ дан 23 November 2019 в 02:01
поделиться

Для забавного применения инициализации двойной скобки смотрите здесь Dwemthy's Array in Java.

Отрывок

private static class IndustrialRaverMonkey
  extends Creature.Base {{
    life = 46;
    strength = 35;
    charisma = 91;
    weapon = 2;
  }}

private static class DwarvenAngel
  extends Creature.Base {{
    life = 540;
    strength = 6;
    charisma = 144;
    weapon = 50;
  }}

А теперь приготовьтесь к BattleOfGrottoOfSausageSmells и ... лохматый бекон!

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

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