자바

2014-04-28 2 views
0
익명 클래스에 매개 변수를 전달

나는 익명의 내부 클래스를 쓰기 위해 노력하고있어자바

interface Face{ 
    void seeThis(String what); 
} 


class Eyes { 
    public void show(Face f){} 
} 

public class Seen { 

    public void test() { 
     Eyes e = new Eyes(); 
     e.show(new Face() { 

      @Override 
      public void seeThis(String what){ 
       System.out.print(what); 
      } 
     }); 

    public static void main(String[] args) { 
     Seen s = new Seen(); 
     s.test(); 
    } 
} 

그것을 매개 변수를 전달하는 seeThis() 방법을 호출하는 방법?

답변

2

메서드 seeThis()Face 클래스에 속하며 익명 성이므로 익명으로 참조를 저장하지 않고는 접근 할 수 없습니다. 당신이 참조를 저장하려면, 다음과 같은 방법으로이 작업을 수행 할 수 있습니다

Seen s = new Seen(); 
s.face.seeThis(); 

다음

public class Seen { 
    public Face face; 

    .... 

    this.face = new Face() { ... }; 
    e.show(this.face); 

와, 이제, 매개 변수를 전달에 관한. 당신은 두 가지 옵션이 있습니다 - 익명 클래스의 외부 매개 변수를 선언하고이 익명의 클래스에 도달 할 수, 또는 정상 하나 익명 클래스를 대체하고 생성자에 매개 변수를 전달하기 위해 그것을 final합니다

접근 하나

final int parameter = 5; 

...(new Face() { 
     @Override 
     public void seeThis() { 
      System.out.println(parameter); 
     } 
    }); 

접근이 :

public class MyFace implements Face() { 
    private final int parameter; 

    public MyFace(int parameter) { 
     this.parameter = parameter; 
    } 

    @Override 
    public void seeThis() { 
     System.out.println(parameter); 
    } 
} 

그런 다음,

... 
e.show(new MyFace(10));  
+0

This statement s.face.seeThis() throw java.lang.NullPointerException – jmt

+0

@EngMarwa'face = new Face()'를'Seen'의 생성자로 이동 시키거나'seen'을 호출하기 전에's.test()'를 호출하십시오. 참조()'. –

+0

고마워요, 일 이니까 – jmt