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

它只是 CostFunction 接口的匿名实现。就像您创建了一个实现此接口的类并创建了该类的一个实例一样。 编辑:我的意思是,两个不同类的实例,因为你的代码中有两个实现。

于 2012-06-21T06:54:58.530 回答
1

的实例化ONETWO正在创建实现 CostFunction 接口的匿名类,因此您会看到该cost方法在同一代码块中实现。

看看这个讨论匿名类的页面。

于 2012-06-21T06:57:57.077 回答
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 回答