2013-06-24 5 views
0

Возможно, это не вопрос Dart.стили кодирования Дарт

у меня есть:

class A { 
    int a; 

    A(this.a); 
} 

class B extends A { 
    String b; 

    B(a, this.b) : super(a); 
} 

Итак, вы видите, класс A имеет атрибут int a и B просто расширяет A и имеет дополнительный атрибут String b и класс-обертку C:

class C { 
    A c; 

    C(this.c); 

    void doSomething() { 
    if (c is B) { 
     print(c.b); 
    } else { 
     print(c.a);  
    } 
    } 

} 

дротик Редактор жалоб, что c doesn't have a getter b. Как вы справляетесь с этим? Я хочу избавиться от предупреждения, но я не хочу добавлять атрибут b в класс A

ответ

1

Вы можете выразить выражение.

print((c as B).b); 
1

Анализатор не должен добавлять предупреждение здесь. Я думаю, что это связано с этой проблемой: Analyzer fails to respect certain "is" checks.

В то же время, вы можете использовать (c as B).b для отливатьc в B.

1

(c as B) работает, но выполняет проверку динамического типа (которая, вероятно, будет устранена виртуальной машиной).

Если вы просто хотите, чтобы удалить предупреждение, без изменения семантики программы вы можете назначить на временной переменной соответствующего типа:

void doSomething() { 
    if (c is B) { 
    B b = c; 
    print(b.b); 
    } else { 
    print(c.a); 
    } 
}