1
public class MinimumEditDistance {
    public interface CostFunction{
        public int cost(int[][] distanceMatrix,CharSequence x, CharSequence y,int i,int j);
    }
    public static final CostFunction ONE = new CostFunction() {
        public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
            return 1;
        }
    };

    public static final CostFunction TWO = new CostFunction() {
        public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
            return 2;
        }
    };

このコードで実際に何が行われているのか理解できません!!! 前とは何newを意味しますかCostFunction()。実際、私はこれを理解するのにかなり混乱しています!

4

5 に答える 5

2

内部クラスを見てください。あなたが持っているのは、内部インターフェースの匿名の内部実装であり、非常に汚い例です。そのため、それを理解するのに苦労しています。

あなたがそれを分割するならば、あなたは持っているでしょう:

-スタンドアロンのConstFunctionインターフェイス

public interface CostFunction{
  public int cost(int[][] distanceMatrix,CharSequence x, CharSequence y,int i,int j);
}

-CostFunctionOneという名前のスタンドアロンのConstFunction実装

public class CostFunctionOne{
  public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
    return 1;
  }
};

-CostFunctionTwoという名前のスタンドアロンのConstFunction実装

public class CostFunctiontTwo{
  public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
    return 2;
  }
};

-上記を使用したスタンドアロンのMinimumEditDistanceクラス

public class MinimumEditDistance{
  public static final CostFunction ONE = new CostFunctionOne();
  public static final CostFunction TWO = new CostFunctionTwo();
}

それらは醜いかもしれませんが、コンテナクラスから変数とメソッドにアクセスできるため、インターフェイスのこのような迅速な実装を選択する場合があります。リスナーを使用すると、それらの多くが表示されます。

于 2012-06-21T06:57:53.723 に答える
1

のインスタンス化ONETWOは、CostFunctionインターフェイスを実装する匿名クラスを作成しているためcost、同じコードブロックにメソッドが実装されているのがわかります。

匿名クラスについて説明しているこのページをご覧ください。

于 2012-06-21T06:57:57.077 に答える
1

これは、CostFunction インターフェイスの単なる匿名実装です。このインターフェイスを実装するクラスを作成し、このクラスのインスタンスを作成した場合と同様です。 編集:つまり、 2 つの異なるクラスのインスタンスです。コードには 2 つの実装があるためです。

于 2012-06-21T06:54:58.530 に答える
0

これが匿名内部クラスの使用法です。

public static final CostFunction ONE = new CostFunction() {
    public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
        return 1;
    }
};

これにより、javacによってクラスCostFunction$1.classが作成されます。

class 'Anonymous inner class' implements CostFunction {
    public int cost(int[][] distanceMatrix, CharSequence x, CharSequence y, int i, int j) {
        return 1;
    }
};
于 2012-06-21T06:59:22.797 に答える
0

基本的に、インターフェイスを実装し、匿名クラスを作成しています。これが機能することを確認するには、次のコードを実行するだけです。

public class Main{
    public interface CostFunction{
        public int cost();
    }
    public static final CostFunction ONE = new CostFunction() {
        public int cost() {
            return 1;
        }
    };

    public static final CostFunction TWO = new CostFunction() {
        public int cost() {
            return 2;
        }
    };
     public static void main (String[] args)
     {
      System.out.println(ONE.cost());
     }
}
于 2012-06-21T07:00:23.800 に答える