представьте себе, что есть два интерфейса, организованных через составной шаблон, один из них имеет метод dispose
среди других методов:
interface IComponent extends ILeaf {
...
function dispose() : void;
}
interface ILeaf {
...
}
В некоторых реализациях есть кое-что общее (скажем, id
), поэтому есть еще два интерфейса:
interface ICommonLeaf extends ILeaf {
function get id() : String;
}
interface ICommonComponent extends ICommonLeaf, IComponent {
}
пока все хорошо. но есть другой интерфейс, который также имеет метод dispose
:
interface ISomething {
...
function dispose() : void;
}
и ISomething
наследуются ICommonLeaf:
interface ICommonLeaf extends ILeaf, ISomething {
function get id() : String;
}
Как только метод dispose
вызывается для экземпляра, который реализует интерфейс ICommonComponent
, компилятор завершается ошибкой с неоднозначной ошибкой ссылки, поскольку ISomething
имеет метод с именем dispose
, а ILeaf
также dispose
метод, оба живут в разных интерфейсах (IComponent, ISomething
) в дереве наследования ICommonComponent.
Интересно, как справиться с ситуацией, если
-
IComponent
, ILeaf
и ISomething
не могут измениться.
- составная структура также должна работать для
ICommonLeaf
& ICommonComponent
- и
ICommonLeaf
& ICommonComponent
должны соответствовать типу ISomething
.
это может быть проблема, связанная с ActionScript-3. я не проверял, как другие языки (например, Java) обрабатывают подобные вещи.