Есть ли ограничение на количество локальных внутренних классов внутри метода? - PullRequest
1 голос
/ 01 мая 2011

У меня возникли некоторые трудности с некоторым кодом Java

class foo{
   public bar() {
      class innerA {}
      class innerB {} // Only this one is valid because it was declare last
   }
}

Моя проблема: только последний объявленный внутренний класс (innerB) виден внутри foo :: bar (). Кроме того, я не могу ссылаться ни на один внутренний класс из другого. Пример:

innerB{
    private innerA _a; // Error
}

Мой вопрос: есть ли ограничение на количество локальных внутренних классов, которые вы можете иметь внутри метода? Могут ли локальные внутренние классы создавать другие объекты локальных внутренних классов? Должны ли они?

РЕДАКТИРОВАТЬ : я неправильно набрал в своей IDE и у меня возникли некоторые проблемы с областью видимости ... еще раз спасибо!

ТИА, нуб

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Пожалуйста, опубликуйте код, который вы действительно пытаетесь заставить работать, и сообщение об ошибке, которое вы получите от компилятора Java. Размещенный вами код не является допустимым Java. Все, что вы хотите сделать, выполнимо. Вот рабочий пример:

public class Foo {
    public void bar() {
        class InnerA {
            public void hello() {
                System.out.println("Hello from InnerA");
            }
            public String getName() {
                return "InnerA";
            }
        }

        class InnerB {
            private InnerA aInB = new InnerA();
            public void hello() {
                System.out.println("Hello from InnerB");
                System.out.println("In InnerB, got name of InnerA : " + aInB.getName());
            }
        }

        InnerA a = new InnerA();
        InnerB b = new InnerB();

        a.hello();
        b.hello();
    }

    public static void main(String[] args) {
        new Foo().bar();
    }
}

Запуск это дает:

Hello from InnerA
Hello from InnerB
In InnerB, got name of InnerA : InnerA
0 голосов
/ 13 марта 2014

Вы не указали тип возврата для bar().

...