2016-09-22 18 views
0

У меня есть анонимный внутренний класс, и я хочу получить (анонимный) его внешний класс в конструкторе. Поэтому я хочу реализовать этот метод:Scala: получить внешний класс из внутреннего класса в конструкторе

new Outer { 
    new Inner { 

    } 
} 

class Outer { 

} 

class Inner { 
    def outerClass: Outer = ??? 
} 
+0

Это невозможно без волшебства трассировки стека. Может быть, мы можем предложить вам лучшее решение вашей проблемы? – talex

+0

Я пробовал это с неявными параметрами, я потерпел неудачу, но, возможно, это возможно для вас? –

+0

Я считаю, что вы пытаетесь решить какую-то другую проблему, выполнив это. Если это правда, объясните это нам. Может быть, это лучшее решение. – talex

ответ

1

Вы можете сделать это с помощью implicits достаточно легко (я предполагаю, как Outer и Inner могут быть изменены, но код, используя их должен выглядеть в этом вопросе). Объявления:

class Outer { 
    implicit def o: Outer = this 
} 

class Inner(implicit val outerClass: Outer) { 
} 

Использование:

new Outer { 
    new Inner { 
    // can use outerClass here 
    } 
} 

или

new Outer { 
    val inner = new Inner { 

    } 

    // inner.outerClass 
} 

И я могу себе представить, что является полезным для DSL,, но убедитесь, что вы (пользователи ¨R API,) на самом деле хотите первым!

2

Что говорит против этого подхода?

new Outer { self => 
    new Inner(self) { 

    } 
} 

class Outer { 
} 

class Inner[A](outerClass:A) { 
    println("CLASS: " + outerClass.getClass) 
} 

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

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