Создание внутреннего класса другого класса.
У меня есть следующая настройка, которая, я думаю, будет работать, но выдает ошибку в моей 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();
}
}