2013-03-14 77 views
3

我有一個類下面的方法:如何調用具有接口作爲參數的方法?

public void Process(Measurable x) 
{ 
    String y = x.getResult(); 

    for (int k = 0; k<item.length; k++) 
    { 
     if (y.equals(item[k])) tally[k]++; 
    } 
} 

我的問題是,我該如何調用該進程的方法?與

Process(Measurable y); 
在默認的構造函數或驅動程序類不起作用

調用它,也不會不帶參數調用它(正如我所期望的)。

+2

提供'Measurable'接口的實現實例。你甚至可以使用[匿名類](http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm)來處理這項工作。 – 2013-03-14 16:27:03

+0

你在說什麼駕駛類?這個方法屬於'Process'類嗎? – asgs 2013-03-14 16:27:21

+1

那麼你想要*使用什麼參數?你知道你正在試圖爲該方法提供信息嗎?你期望這些信息來自哪裏? – 2013-03-14 16:30:13

回答

1

您可以使用實現Measurable接口的類來調用它。例如:

假設你有類:

class Foo implements Measurable { 
    @Overrride 
    public String getResult(){ return "bar"; } 
} 

然後你就可以調用Process像這樣:

Process(new Foo()); 

這需要所謂的Polymorphism的面向對象編程思想的優勢。

人也提到,您可以使用anonymous inner class像這樣:

Process(new Measurable(){ 
    @Override 
    public String getResult() { 
     return "hey!"; 
    } 
}); 
+0

謝謝!我應該知道這一點。 – user2170672 2013-03-14 16:41:52

0

即使無法直接實例化對象,也可以使用將對象實現爲接口類型。

例如,如果Measurable是一個接口,我們有這樣一個類:

public class MeasuredObject implements Measurable { 
    ... 
} 

然後我們可以做類似如下:

MeasuredObject object = new MeasuredObject(); 
Measurable measurableObject = (Measurable) object; 

這應該表明,打電話給你方法是可能的。

Process(measurableObject); 

顯式類型轉換不是必需的,它應該有助於說明這個概念。

(小邊注:考慮加入Java編碼標準,使您的方法名稱爲camelCase它使你的代碼更具可讀性。)

1

調用Process方法用類實現的實例Measurable接口;即使是anonymous class也可以。

+0

謝謝!我相信這是非常基本的。 – user2170672 2013-03-14 16:41:34

2
// How to call your Process method 
Measureable y = new ConcreteMeasureable() 
Process(y); 

// Assuming you have something like this... 
class ConcreteMeasureable implements Measureable 
{ 
    @Override 
    public String getResult() 
    { 
     return "something here"; 
    } 
} 
1

你需要創建一個實現Measurable對象:

public class Test { 
    public static void main(String args[]) { 
    new Test().test(); 
    } 

    public interface Measurable { 
    String getResult(); 
    } 

    // Here to make `Process` compile. 
    String[] item; 
    int[] tally; 

    public void Process(Measurable x) { 
    String y = x.getResult(); 

    for (int k = 0; k < item.length; k++) { 
     if (y.equals(item[k])) { 
     tally[k]++; 
     } 
    } 
    } 

    static class M implements Measurable { 

    @Override 
    public String getResult() { 
     return "M"; 
    } 

    } 

    public void test() { 
    // Create an Object on the fly that implements Measurable (in a rather silly way). 
    Process(new Measurable() { 

     @Override 
     public String getResult() { 
     return "Hello"; 
     } 

    }); 
    // Do it a bit more normally. 
    Process(new M()); 
    } 
} 
0

試着這麼做:

public class Driver { 
    public static void main(String...args) { 
     Driver driver = new Driver(); 
     Foo foo = new Foo(); 
     driver.process(foo); 
    } 

    public void process(Measurable x) { 
     String y = x.getResult(); 

     for (int k = 0; k<item.length; k++) { 
      if (y.equals(item[k])) tally[k]++; 
     } 
    } 

    private class Foo implements Measurable { 
     String getResult() { 
      /* Do stuff */ 
     } 
    } 

    public interface Measurable { 
     String getResult(); 
    } 
} 

還有一個地方有y,itemtally

P.S.在Java中,方法名稱一般是較低的駱駝。

相關問題