Создание внутреннего класса другого класса.

У меня есть следующая настройка, которая, я думаю, будет работать, но выдает ошибку в моей IDE (Android Studio):

// MyClass1.java
public class MyClass1{
    public MyClass1(){}
    public class MyNestedClass1{}
}

// MyClass2.java
public class MyClass2{
    public static MyClass1 MY_CLASS1 = new MyClass1();
    public MyClass2(){
        new MY_CLASS1.MyNestedClass1(); //Error
    }
}

Конкретная ошибка IDE:

не может разрешить символ MyNestedClass1

3 ответа

Решение

Обозначение

MY_CLASS1.new MyNestedClass1(); //No Error

Синтаксис

<Expression that resolves to a reference of the enclosing class>.new [Name of nested inner class](..)
// MyClass2.java
public class MyClass2{
    public static MyClass1 MY_CLASS1 = new MyClass1();//you have already instantiated MyClass1 by new operator here
    public MyClass2(){
        MY_CLASS1.new MyNestedClass1(); //so now intantiate only inner class by new operator
    }
}

Вы можете определить вложенный класс как static, Это позволило бы создавать экземпляры независимо от MyClass1.

// MyClass1.java
public class MyClass1{
    public MyClass1(){}
    public static class MyNestedClass1{}
}

// MyClass2.java
public class MyClass2{
    public MyClass2(){
        /* One Way. */
        new MyClass1.MyNestedClass1();
        /* Or Another. */
        new MyNestedClass1();
    }
}
Другие вопросы по тегам