2015-08-05 3 views
0

У меня есть класс структура, как это:Java: ссылаться на внешний классе в вложенном статическом классе

public class OuterClass { 

    private static class InnerClass { 

     public void someMethod() { 
      OtherClass.otherMethod(<???>); 
     } 

} 

, который относится к статическому методу какого-либо другой класс OtherClass:

public class OtherClass { 

    public static void otherMethod(OuterClass) { 
     .... 
    } 

} 

Я пытаюсь выяснить, что положить вместо <???>. Как я могу обратиться к экземпляру внешнего класса из внутреннего статического класса? Я хотел бы сделать ссылку на неявный thisOuterClass.

+0

не делая внутренний класс 'static'? –

+0

@tobias_k, конечно, я согласен, что это не идеальная настройка класса. Но скажем, я не могу его изменить. – fiveclubs

+0

Какой экземпляр внешнего класса? –

ответ

4

Вы, очевидно, нужен объект OuterClass типа:

public void someMethod() { 
    OuterClass oc = new OuterClass(); 
    OtherClass.otherMethod(oc); 
} 

В случае, если ваш внутренний класс не является статическим, то вы могли бы сделать:

//remove static here 
private class InnerClass { 
    public void someMethod() { 
     OtherClass.otherMethod(OuterClass.this); 
    } 
} 

Вы должны знать различные между вложенными классами - статические и нестационарные. Статические вложенные классы - это просто классы, как и все остальные, только что определенные в другом классе (обычно из-за принципа инкапсуляции). Внутренние статические экземпляры классов не знают об экземпляре внешнего класса.

Вложенный внутренний класс (не статический) мандат, что объект внутреннего класса существует в экземпляре внешнего класса. Вот почему вы можете получить к нему доступ через OuterClass.this.

+0

Это то, что я хотел сделать.Забывая, что для внутреннего статического класса нет смысла ссылаться на «это» в любой емкости, я смог сделать его нестатичным и ссылаться на OuterClass.this. Это был синтаксис, который я не знал, что вы могли бы сделать. Благодарю. – fiveclubs

+0

«Внутренний статический класс» - неправильное обозначение - внутренний класс * является ** вложенным классом **, который ** не является ** 'static'. –

0

Самый простой способ - передать экземпляр внешнего класса в конструкторе или в методе, так как innerClass не знает этот класс.

так:

public void someMethod(OuterClass outerClass) { 
    OtherClass.otherMethod(outerClass.myMethod()); 
} 
Смежные вопросы