У меня есть протокол A
.Я хочу создать протокол B
такой, что расширение типа с помощью B
заставляет программиста предоставлять реализации для всех функций-членов A
.
Это, конечно, просто наследование интерфейса в ядреJava.
Я видел композиционные подходы к этому.Проблема в том, что пространство имен маскируется.Если A
находится в пространстве имен c.a
, все методы определяются в этом пространстве имен.Используя состав, методы для B
определены в пространстве имен c.b
.
Предположительно, для пространства имен c.b
требуется пространство имен c.a
.Таким образом, переменные для методов затеняются после определения B
.
Это становится проблемой, если есть другой протокол C
, который наследуется от A
.Что происходит, когда оба пространства имен c.b
и c.c
требуются в пространство имен клиента lib?Один из наборов методов vars затмевает другой, и выигрышный набор не работает с типами, которые удовлетворяют протоколу проигрыша .
Если не писать собственный макрос определения протокола и расширять макросыКак бы я подошел к этой проблеме?