Это может быть удобно при использовании разделяемой памяти, среди других применений ... Например: http://www.boost.org/doc/libs/1_51_0/doc/html/interprocess/synchronization_mechanisms.html# interprocess.synchronization_mechanisms.conditions.conditions_anonymous_example
FXMLLoader
создает экземпляры типов посредством отражения. Это означает, что у класса должен быть либо конструктор, параметры которого помечены @NamedArg
, либо конструктор с нулевыми параметрами. @NamedArg
решает проблему имен параметров, которые не обязательно сохраняются в байтовом коде, как лучше объяснено в в этом ответе . Остальные атрибуты будут установлены на объекте в соответствии с правилами, указанными в этого раздела из Введение в FXML . Подводя итог, можно сказать, что атрибут / элемент FXML должен иметь соответствующий установщик свойств, свойство только для чтения List
или свойство только для чтения Map
в целевом классе.
Что все это значит для вашего вопроса:
StringConverter
. @NamedArg
аннотированные параметры конструктора. StringConverter
. Глядя на исходный код, не похоже, что ни одна из реализаций StringConverter
использует аннотацию @NamedArg
. Однако они часто предоставляют конструктор без аргументов. Это позволит вам использовать их, но вы можете потерять возможность их настройки. Например, при использовании LocalDateStringConverter
вы не сможете настроить формат.
Тем не менее, вы всегда можете создать фабричный класс и использовать fx:factory
в файле FXML.
public class Converters {
public static StringConverter<LocalDate> myAwesomeConverter() {
DateTimeFormatter formatter = ...;
return new LocalDateStringConverter(formatter, formatter);
}
}
<DatePicker>
<converter>
<Converters fx:factory="myAwesomeConverter"/>
</converter>
</DatePicker>
Или, если вам не нужен пользовательский форматер, вы можете просто использовать конструктор без аргументов конвертера.
<DatePicker>
<converter>
<LocalDateStringConverter/>
</converter>
</DatePicker>