#java #inner-classes
#java #внутренние классы
Вопрос:
Как я могу получить доступ к внешнему классу super
из внутреннего класса?
Я переопределяю метод, чтобы заставить его работать в другом потоке. Из встроенного потока мне нужно вызвать исходный метод, но, конечно, простой вызов method()
превратится в бесконечную рекурсию.
В частности, я расширяю BufferedReader:
public WaitingBufferedReader(InputStreamReader in, long waitingTime)
{
[..]
@Override
public String readLine()
{
Thread t= new Thread(){
public void run()
{
try { setMessage(WaitingBufferedReader.super.readLine()); } catch (IOException ex) { }
}
};
t.start();
[..]
}
}
Это где-то дает мне исключение NullPointerException, которое я не могу найти.
Спасибо.
Ответ №1:
Вот так:
class Outer {
class Inner {
void myMethod() {
// This will print "Blah", from the Outer class' toString() method
System.out.println(Outer.this.toString());
// This will call Object.toString() on the Outer class' instance
// That's probably what you need
System.out.println(Outer.super.toString());
}
}
@Override
public String toString() {
return "Blah";
}
public static void main(String[] args) {
new Outer().new Inner().myMethod();
}
}
Приведенный выше тест при выполнении отображает:
Blah
Outer@1e5e2c3