2014-04-28 60 views
0

我試着寫匿名內部類參數傳遞到匿名類在Java中

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類,該實例是匿名的,因此在未存儲引用的情況下無法訪問。如果你想存儲的參考,您可以通過以下方式做到這一點:

public class Seen { 
    public Face face; 

    .... 

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

然後,

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

現在,關於傳遞參數。你有兩個選擇 - 聲明參數匿名類外部的,並且爲了到達這個匿名類,或與正常更換匿名類和參數傳遞給它的構造使其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

此聲明s.face.seeThis()throw java.lang.NullPointerException – jmt

+0

@EngMarwa嘗試將'face = new Face()'移動到'Seen'的構造函數中,或者在調用's.test()'前調用' seeThis()'。 –

+0

謝謝,這是工作 – jmt