2014-09-02 5 views
0

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

+0

Выражение _non-static inner_ является избыточным. _inner_ означает _non-static_ вложенный класс. –

+0

Хорошо, спасибо. Я изменил название. – bcorso

+0

Здесь нет статического класса. – EJP

ответ

2

обозначения

MY_CLASS1.new MyNestedClass1(); //No Error 

Синтаксис

<Expression that resolves to a reference of the enclosing class>.new [Name of nested inner class](..) 
+0

Awesome, спасибо! Я уверен, что это уже охвачено, но я действительно ничего не нашел и не знаю, в каком месте искать в этой ситуации. Ценить это! – bcorso

+0

И, как показывает уродство синтаксиса, это не то, что вы должны делать. Эти внутренние классы должны управляться их содержащим классом. – Thilo

+0

@ Тило, что вы подразумеваете под управлением? Должен ли я не подвергать класс напрямую, а вместо этого создавать экземпляр только в родительском классе? – bcorso

1
// 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 
    } 
} 
1

Вы можете определить вложенный класс, как 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(); 
    } 
} 
+0

Спасибо, но мне действительно нужна нестатика, потому что я использую элемент из внешнего класса. Извините, я просто оставил это на примере, чтобы упростить ситуацию. Все еще хорошо знать, +1. – bcorso

Смежные вопросы