2013-03-14 83 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中,方法名称一般是较低的骆驼。

相关问题