FX 11: загрузка контроллера в Baseclass

Если вы хотите сделать это в одной строке, напомните, что любой объект POSIXct в R - это просто число (секунды UTC с начала эпохи) и что «часовой пояс» - это просто атрибут, который определяет, как это число напечатано .

Поэтому мы можем использовать structure следующим образом:

x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
structure(as.integer(x), class = class(x), tzone = 'America/Los_Angeles')
# [1] "2009-06-03 11:30:00 PDT"

as.integer разделяет класс и атрибуты x и structure позволяет нам перестроить / настроить их. class(x) является сокращением для c('POSIXct', 'POSIXt'); если ваш объект имеет миллисекунды, и вы хотите отслеживать их, вы можете использовать as.numeric(x).

2
задан kai 18 January 2019 в 06:51
поделиться

1 ответ

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

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

При этом для базового класса становится возможным инициализировать поля производного класса - даже если базовый класс не имеет никакой информации о своих будущих производных. Это не нужно. Он получает эту информацию через рефлексию (rsp. Загрузчик делает).

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

Так что теперь я думаю, что этот универсальный код всплывающего окна FXML на самом деле совершенно действителен.

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

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

Итак, еще раз: хотя рассматриваемый код работает надежно, при таком поведении документированный сценарий использования может привести к проблемам.

0
ответ дан kai 18 January 2019 в 06:51
поделиться
Другие вопросы по тегам:

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