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()
之前表示什么。实际上,我对此很了解!
答案 0 :(得分:2)
看看inner classes。你所拥有的是内部接口的匿名内部实现,这是一个非常脏的例子,这就是你无法理解它的原因。
如果你将它分开,你可以:
- 一个独立的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();
}
虽然它们可能很难看,但有时您会选择对接口进行如此快速的实现,因为您可以从容器类访问变量和方法。使用听众时,你会看到很多。
答案 1 :(得分:1)
它只是CostFunction接口的匿名实现。就像你已经创建了一个实现这个接口的类并创建了这个类的实例一样。 编辑:我的意思是,两个不同类的实例,因为您的代码中有两个实现。
答案 2 :(得分:1)
ONE
和TWO
的实例化正在创建实现CostFunction接口的匿名类,因此您会看到在同一代码块中实现cost
方法的原因。
看看这个谈论匿名类的page。
答案 3 :(得分:0)
这就是Anonymous内部类的用法。
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;
}
};
答案 4 :(得分: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());
}
}