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メソッドをどのように呼び出すのですか?でそれを呼び出す

Process(Measurable y);

デフォルトのコンストラクターまたはドライバークラスでは機能せず、パラメーターなしで呼び出すこともできません(私が期待するように)。

4

6 に答える 6

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";
    }
}
于 2013-03-14T16:31:39.690 に答える
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());
  }
}
于 2013-03-14T16:32:22.793 に答える
1

インターフェイスProcessを実装するクラスのインスタンスを使用してメソッドを呼び出します。匿名のクラスMeasurableでもかまいません。

于 2013-03-14T16:30:05.667 に答える
1

インターフェイスを実装するクラスで呼び出しMeasurableます。例えば:

あなたがクラスを持っていると仮定します:

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

そして、あなたはProcessそのように呼ぶことができます:

Process(new Foo());

これは、ポリモーフィズムと呼ばれるオブジェクト指向プログラミングのアイデアを利用しています。

人々はまたあなたがそのように匿名の内部クラスを使うことができると言いました:

Process(new Measurable(){
    @Override
    public String getResult() {
        return "hey!";
    }
});
于 2013-03-14T16:30:43.673 に答える
0

インターフェイスを直接インスタンス化することはできませんが、ポリモーフィズムを使用して、インターフェイスを実装するオブジェクトをインターフェイスタイプとして扱うことができます。

たとえば、Measurableがインターフェイスであり、次のようなクラスがあります。

public class MeasuredObject implements Measurable {
    ...
}

次に、次のようなことを行うことができます。

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

これは、メソッドの呼び出しが可能であることを示しているはずです。

Process(measurableObject);

明示的な型キャストは必要ありませんが、概念を説明するのに役立つはずです。

(ちょっとした注意:Javaコーディング標準に準拠し、メソッド名をに変更することを検討してくださいcamelCase。これにより、コードがはるかに読みやすくなります。)

于 2013-03-14T16:29:52.970 に答える
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

PS Javaでは、メソッド名は一般的に小文字のキャメルケースです。

于 2013-03-14T16:33:58.240 に答える