Статический метод, возвращающий внутренний класс - PullRequest
10 голосов
/ 30 октября 2010

Я действительно не понимаю, почему приведенный ниже метод getMyClass2 не может быть статическим, почему он не является допустимым кодом Java?

public class MyClass
{
    private class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

Ответы [ 3 ]

13 голосов
/ 30 октября 2010

Вы должны сказать, что внутренний класс является статическим, потому что нестатический привязан к экземпляру, поэтому его нельзя вернуть из статического метода

2 голосов
/ 30 октября 2010

(Нестатические) экземпляры внутреннего класса всегда связаны с экземпляром класса, в котором они содержатся. Статический метод будет вызываться без ссылки на конкретный экземпляр MyClass, поэтому, если он создал экземпляр MyClass2, не было бы экземпляра MyClass, с которым он мог бы быть связан.

0 голосов
/ 30 октября 2010

Да,

, поскольку в 99% случаев вы не хотите, чтобы они были статическими; D

Статический «вложенный» класс - это не что иное, как класс «верхнего уровня», которыйопределяется внутри другого класса.Если статический класс MyClass2 в приведенном выше примере будет общедоступным, вы можете просто сказать, что new MyClass.MyClass2 ();В случае нормального «внутреннего класса» вы должны сказать это объекту, а не классу MyClass: MyClass some = new MyClass (), а затем что-то вроде new some.MyClass2 () (я забыл точный синтаксис).

С уважением

...