Я нахожусь в ситуации, когда мне нужно смешать черту, определенную в другом пакете. Чтобы помочь с тестированием, защищенный метод в этой черте является квалифицированным пакетом. Вот пример:
package A {
trait X {
protected[A] def method(arg: Int)
}
}
package B {
class Y extends A.X {
protected[A] def method(arg: Int) { }
}
}
Компиляция с помощью скаляка 2.9.1 дает:
test.scala:9: error: A is not an enclosing class
protected[A] def method(arg: Int) { }
Изменение «защищенного [A]» в классе Y на любой другой модификатор доступа приводит к этому:
test.scala:9: error: overriding method method in trait X of type (arg: Int)Unit;
method method has weaker access privileges; it should be at least protected[A]
override protected def method(arg: Int) { }
У меня такой вопрос: если предположить, что определение черты X не может измениться, есть ли какие-либо изменения в классе Y, которые позволили бы ему расширить черту X? (при сохранении некоторого уровня «защищенного» доступа)
Если это невозможно, есть ли другие рекомендуемые стратегии проектирования, чтобы обойти это? (кроме публичного указания метода)