У меня есть неизменный контейнер-класс.Ссылка внутренний класс от конструктора
class Foo[+T](val arg: T) {
// ...
}
Я хочу создать подкласс Foo
, который имеет внутренний объект в качестве аргумента.
class Bar extends Foo[this.Inner.type](this.Inner) {
object Inner {
// ...
}
// ...
}
Я хотел бы, чтобы это был внутренний объект (а не отдельные один), потому что я нужен доступ к конфиденциальным данным в Bar
. Тем не менее, когда я пытаюсь скомпилировать этот код, я получаю:
Example.scala:6: error: this can be used only in a class, object, or
class Bar extends Foo[this.Inner.type](this.Inner) {
^
Example.scala:6: error: this can be used only in a class, object, or template
class Bar extends Foo[this.Inner.type](this.Inner) {template
^
Можно ли вызвать конструктор суперкласса, используя внутренние объекты в качестве аргументов? И если да, то что я делаю неправильно?
EDITED
В ответ на некоторые замечания, я полагаю, что я должен дать еще несколько особенностей. Мой класс Foo
фактически специализирован как Foo[+T <: SomeAbstractClass]
и имеет несколько операций, определенных на нем, которые работают с экземплярами SomeAbstractClass
. Я хочу создать подкласс Bar
, который ведет себя как Foo
и его базовый SomeAbstractClass
. Поскольку у меня не может быть Bar
наследовать от обоих классов, я понял, что внутренний объект был следующим лучшим. Действительно, я хочу конкретно указать Bar
и Inner
, которые ведут себя как контейнер Foo
и элемент SomeAbstractClass
, и которые имеют полный доступ к частным переменным друг друга.
* Я хотел бы, чтобы это было внутренний объект (а не отдельный один), потому что я нужен доступ к закрытым данным в баре * Можете ли вы привести пример того, что именно это вы хотите сделать? Для меня это похоже на проблему XY. –
@YuvalItzchakov Я добавил дополнительный абзац, немного более конкретный. Это вообще помогает? –