2017-02-17 21 views
0

У меня проблема, связанная с новым экземпляром связанного правила в Dart 1.22.0. У меня есть класс BaseModel, который принимает параметризованный тип, называемый ParentType, который сам расширяет BaseModel.Вложенные параметризованные типы с Dart 1.22.0 новый экземпляр связанного правила

Не все BaseModels имеют определенный ParentType, и если я создаю BaseModel в качестве ParentType, тогда я получаю бесконечное нарушение правил.

Вот пример:

abstract class BaseModel<ParentType extends BaseModel> { 
    ParentType parentModel 
} 

class ParentModel extends BaseModel<BaseModel<...>> {} 

class ChildModel extends BaseModel<ParentModel> {} 

Я собираюсь, игнорируя правила сейчас, как этот вопрос, казалось, не оказывает никакого влияния на развитие.

ответ

0

Это может делать то, что вы хотите:

abstract class BaseModel<ParentType extends BaseModel<Null>> 
+0

Это похоже на простой пример, но он не работает для моих более сложных отношений BaseModel. –

+0

Можете ли вы обновить свой вопрос конкретным примером? –

2

Зависит немного о том, что вы хотите достичь, но при условии, что вы хотите ParentModel, который будет использоваться в качестве любого вида BaseModel (где parentModel поле всегда будет null), то это может быть то, что вы хотите:

abstract class BaseModel<ParentType extends BaseModel<ParentType>> { 
    ParentType parentModel; 
} 

class ParentModel extends BaseModel<Null> {} 

class ChildModel extends BaseModel<ParentModel> {} 

Если нет, то я должен был бы знать больше о том, какие ограничения и цели вашей проблемы есть.

+0

Это удовлетворяет анализатору для базового примера, но он ломается, где у меня сложнее наследование. класс 'ParentModel расширяет ChildModel ' класса 'ChildModel расширяет BaseModel ' Моего кодовое слишком велик и сложен, чтобы сделать все эти изменения типизации, и я не вижу пользы. Я смирился с тем, чтобы игнорировать это правило. В прошлом я боролся с сильным режимом, который стал стимулом для реализации этого шаблона для начала. До этого я был основным видом полей, который мне кажется предпочтительным решением. –

 Смежные вопросы

  • Нет связанных вопросов^_^