2016-07-18 2 views
0
public class Outer { 
    public void Say(Bar bar) { 
     //... 
    } 
    public Outer(final Foo foo) { 
     //... 
    } 
} 

public interface Foo { 
    void blah(Bar bar); 
} 

public class Application { 
    public static void main(String[] args) { 
     Outer outer = new Outer(new Foo() { 
      @Override 
      public void blah(Bar bar) { 
       /*trying to access "outer"*/.Say(bar); 
      } 
     }); 
    } 
} 



Что нужно сделать для доступа к «внешнему»?
Спасибо.



StackOverflow запретил мне публиковать это, потому что он сказал, что мое сообщение было главным образом кодом, и эта строка - всего лишь куча глупостей. Пожалуйста, проигнорируйте это. Java - Как получить доступ к внешнему классу из аргумента?

+0

класс Outer не скомпилирован. 'Say' выглядит как конструктор для меня (с капиталом S), но не совпадает с именем класса. Было ли это обычным методом? В этом случае отсутствует тип возвращаемого значения или имя метода. Имя метода должно начинаться с маленькой буквы. –

+0

@ OleV.V. Извините, я пропустил «пустоту». –

ответ

1

Outer не достижим. Поскольку экземпляр создается после создания Foo.

Я вижу два пути: 1. Преобразуйте переменную external в статический контекст. 2. Передайте переменную при вызове метода blah()

0

В вашем примере, 'внешний' просто 'это'

+0

Не работает. Кажется, что «это» разрешено как объект «Foo». –

+0

Я думаю, что это неправда. Объект 'outer' еще не создан, поэтому к нему нельзя получить доступ с помощью' this' qualifier. – Jokab

+0

Попробуйте, вы пытаетесь ссылаться на объект изнутри, поэтому он и есть. – SPlatten

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