2013-10-19 3 views
5

Java에서 다음과 같은 질문이 생깁니다. 내부 클래스가 외부 클래스의 메서드에서 선언 된 경우 내부 클래스의 인스턴스를 초기화하는 방법은 무엇입니까? 다음과 같은 경우에 컴파일 오류가 발생했습니다. 많은 감사합니다.외부 클래스의 메서드에서 내부 클래스가 선언 된 경우 내부 클래스의 인스턴스를 초기화하는 방법?

class Outer { 
    public int a = 1; 
    private int b = 2; 
    public void method(final int c){ 
     int d = 3; 
     class Inner{ 
      private void iMethod(int e){ 
       System.out.println("a = " + a); 
       System.out.println("b = " + b); 
       System.out.println("c = " + c); 
       System.out.println("e = " + e); 
      } 
     }   
    } 
    public static void main (String[] args){ 
     Outer outer = new Outer(); 
     Outer.Inner inner = outer.new Inner();// there is an compile error here 
    } 
} 
+0

메서드 로컬 클래스는 해당 메서드에서만 사용할 수 있습니다. –

답변

6

수 없습니다. Inner 클래스는 method(int) 메서드의 로컬 클래스입니다.

액세스하려는 경우 큰 범위로 선언해야합니다.

운명이 엉망이되면 반성을 사용하여 인스턴스를 얻을 수 있습니다. 이 방법의 유형 Inner 외부의 변수를 선언 할 수 없기 때문에, 예를 들어 가지고

package com.so.examples; 

class Main { 
    public void method(final int c){ 
     class Inner{ 
      public Inner() {} 
      private void iMethod(int e){ 
       System.out.println("inner method"); 
      } 
     }     
    } 

    public static void main (String[] args) throws Exception{ 
     Class clazz = Class.forName("com.so.examples.Main$1Inner"); 
     Constructor<?> constructor = clazz.getConstructor(new Class[]{Main.class}); 
     Object instance = constructor.newInstance(new Main()); 
     System.out.println(instance.getClass()); 
    } 
} 

이 반사없이

class com.so.examples.Main$1Inner 

를 출력, 당신은 회원에 액세스 할 수 없습니다.

8

외부 클래스의 메서드에서 내부 클래스가 선언 된 경우 내부 클래스의 인스턴스를 초기화하는 방법은 무엇입니까?

수 없습니다. 클래스의 범위는 메소드 자체에 국한되어 있습니다. 메서드 외부에서 로컬 변수에 액세스 할 수없는 이유와 비슷합니다. JLS §6.3 - Scope of a Declaration 가입일

는 :

즉시 블록 (§14.2)로 둘러싸인 지역 클래스 선언의 범위는 그 자신의 클래스를 선언을 포함하는 직접 둘러싸는 블록의 나머지이다.

+0

고마워요! 나는 열심히 노력했지만 그렇게 할 길을 찾지 못했습니다. 이제는 그럴 수 없다는 것을 이해합니다 – bean

+0

@bean 그냥 메서드 밖에 두어 ... class Outer {public static void main (String [] args) {Inner inner = new Inner(); } public void method() {} 클래스 내부 {}}' – Radiodef

관련 문제