Предположим, у меня есть класс, как это:Как получить значение поля по умолчанию в абстрактном классе
abstract class Foo {
String name bar = 'bar';
}
Используя зеркало, мы можем получить значение bar
?
Предположим, у меня есть класс, как это:Как получить значение поля по умолчанию в абстрактном классе
abstract class Foo {
String name bar = 'bar';
}
Используя зеркало, мы можем получить значение bar
?
Общие ответы:
super.field
, если вы расширяете класс и хотите получить доступ к его полям/добытчиками.Поскольку вы смотрели на Дадо, позвольте мне объяснить, как это работает, хотя это не общий ответ на этот вопрос.
Во-первых, подход с Dado был и довольно экспериментальный. Я пытался использовать языковые функции, чтобы требовать декларативного определения модулей, чтобы авторы не могли писать модули, которые не работали с генерацией кода. В Дарте и зеркалах произошли некоторые изменения, которые делают этот подход менее работоспособным или, по крайней мере, заставляют его требовать больше шаблонов, поэтому я переосмысливаю все это. Возьмите любую технику, которую вы найдете там с выгодой или двумя солями :)
Для всех, кто не смотрел образец или код, в Dado вы объявляете абстрактный класс для определения модуля. Поле со значением объявляет фиксированное одноэлементное значение, похожее на то, как более традиционный контейнер DI может написать вам bind(Foo).toValue(new Foo())
.
Способ, которым я (используется) получить значение, путем создания экземпляра абстрактного класса через зеркала, а затем просто просто прочитать поле. dart: зеркала изменены, чтобы запретить создание экземпляров абстрактных классов, поэтому это больше не работает. Это печально, потому что другие типы привязок были объявлены абстрактными методами, и они вызывают предупреждения в не-абстрактных классах.
Зависит. У вас есть экземпляр этого класса? – MarioP
Это интересный вопрос, но сложный, поскольку он хочет значения по умолчанию. Если конструктор перезаписывает значение по умолчанию, вы также не можете получить его из экземпляра. –
Верно, не думал о конструкторе здесь. Также понял, что я написал «экземпляр» вместо «подкласса». В любом случае экземпляр будет бесполезен. – MarioP