2016-12-07 2 views
2

У нас есть иерархия классов, и нам нужно реализовать метод базового класса, тип возврата которого равен this.runtimeType. В Java выполняется с использованием общего параметра class Base extends <This extends Base<This>>. В Dart работает тоже хорошо:Этот общий тип

class A<This extends A<This>> { 
    This copy() => //... 
} 
class B extends A<B> {} 

A a = new A(); // ok 
A ab = new B(); // ok 
B b = new B(); // ok 

, но пока у вас есть нет не абстрактные родительские классы:

A a2 = new A().copy(); // Unsound implicit cast from A<dynamic> to A<A<dynamic>> 

И, конечно, мы не можем указать общий параметр для А здесь явно - это рекурсивная , Это какая-то ошибка, или есть другой способ сделать это в Дарт?

ответ

4

Я думаю, что это просто недостающая особенность в сильном режиме.

я только получаю ошибку с

analyzer: 
    strong-mode: 
    implicit-casts: false 

и это было добавлено не так давно.

В DartPad ошибки не устраняются, даже с включенным Strong mode.

+0

dartanalyzer version 1.20.1, предупреждение с 'анализатором: сильный режим: истинный' только. –

+0

Сильный режим - это работа. –

+1

Даже если это одна из черт дротика, я думаю :) –