Как установить значение по умолчанию для чужого типа? Вы не.
Помните, что вы сказали компилятору, что вы просто описываете объект класса js - если есть значения по умолчанию, они уже существуют.
Подумайте, как бы вы сделали это в JS - обычно это будет просто {type:"geojson"}
или var obj = {}; obj.type = "geojson";
, чтобы выполнить два необходимых шага: а) создание простого объекта и б) назначение некоторого типа, который должен быть по умолчанию .
Сработает фабрика, возможно, статический метод в GeoJsonSource, так что понятно, что вы делаете.
Другой вариант - не помечать тип GeoJsonSource как native
и не давать ему имя Object в глобальном пространстве имен (т. Е. Вам не разрешено переписывать чужие данные), если это подходит для вашего вариант использования. Теперь это позволит вам управлять классом - определять значения по умолчанию, добавлять логику в конструкторы и тому подобное, но вы должны убедиться, что методы экспортируются правильно.
Ограничения этого подхода включают тот факт, что любой объект, считываемый из строки JSON, не будет вашим типом GeoJsonSource (но, с другой стороны, это может не иметь значения, поскольку он, вероятно, уже имеет свойство type
. Логика все равно будет тем не менее, отсутствует в его методах, поскольку чтение из JSON всегда создает простые экземпляры Object (если вы не передаете функцию reviver
в JSON.parse()
).
Аналогично, простой Объект, переданный из JS или прочитанный из JSON.parse()
, не будет правильно проходить проверку instanceof
на ваш не нативный тип, что может потребовать от вас использования Js.uncheckedCast
в некоторых местах, где вы обычно пишете идиоматическая Java.
Поскольку вы создаете обертку (которая, вероятно, будет использоваться другими, которые могут не обязательно понимать эти ограничения так же полно, как вы), я бы предпочел заводской подход - да, он требует немного больше настроек для вашего с другой стороны, но в более простом JS понятнее то, о чем вы просите, и он будет вести себя более предсказуемо, если кто-то будет рассматривать простой JS-объект как Java GeoJsonSource (поскольку он равен один).