Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的对象类型创建功能接口_Java - Fatal编程技术网

Java 使用不同的对象类型创建功能接口

Java 使用不同的对象类型创建功能接口,java,Java,我已经为我的项目定义了一个名为Function的功能接口。它只有一个方法,call,如下所示: public interface Function { public void call(); } 在我的Field对象中,我有: public class Field { private Square[][] matrix; //Square is dispensable. public Field(int rows, int cols

我已经为我的项目定义了一个名为
Function
的功能接口。它只有一个方法,
call
,如下所示:

    public interface Function {
       public void call();
    }
在我的Field对象中,我有:

    public class Field {
      private Square[][] matrix; //Square is dispensable.
      public Field(int rows, int cols) {
        matrix = new Square[rows][cols];
        for(int i = 0; i < rows; i++){
          for(int j = 0; j < cols; j++){
            this.matrix = new Square(i * Square.NORMAL_WIDTH, j * Square.NORMAL_HEIGHT);
          }
        }
      }
    }
公共类字段{
私有平方[][]矩阵;//平方是可有可无的。
公共字段(整数行,整数列){
矩阵=新的正方形[行][列];
对于(int i=0;i
它工作得很好,它类似于JavaScript,但我无法将我的注意力转移到它身上。但是,我想开发这种方法:

    public void each(Function f){
      int rows = matrix.length;
      for(int i = 0; i < rows; i++){
        int cols = matrix[i].length;
        for(int j = 0; j < cols; j++){
          f.call();
        }
      }
    }
public-void-each(函数f){
int行=矩阵长度;
对于(int i=0;i
它将把某些代码(在本例中是函数实现)附加到矩阵的每个元素上。这样,我就可以访问它的属性。 但矩阵的每个对象都是正方形。我如何访问它?我可以把它传递给函数

    //making an small alteration to the parameter.
    public interface Function {
       public void call(Square square);
    }

    public void each(Function f){
      int rows = matrix.length;
      for(int i = 0; i < rows; i++){
        int cols = matrix[i].length;
        for(int j = 0; j < cols; j++){
          f.call(matrix[i][j]);
        }
      }
    }
//对参数做一个小改动。
公共接口功能{
公众无效呼叫(Square);
}
公共空间(功能f){
int行=矩阵长度;
对于(int i=0;i

但是,我仍然会被困在
Square
类型中。我可以使用泛型类型,也许?

是的,你需要使它泛型化

最简单的情况是:

public interface Function<T> {
    public void call(T arg);
}

public void each(Function<Square> f) { ... }
这样,您不仅可以应用
函数
,还可以应用其任何超类型的
函数
,例如

Function<Object> PRINT = new Function<Object>() {
    public void call(Object arg) {
        System.out.println(arg);
    }
}
函数打印=新函数(){
公共无效调用(对象arg){
系统输出打印项次(arg);
}
}
而不是

private Square[][] matrix;
使用


而且代码不受正方形限制。当然,最终它将绑定到一个具体的类,但代码耦合性较差。(我不确定泛型在这方面是否有帮助,因为现在我还太早,无法更仔细地思考:-)

…是的,泛型是解决这个问题的方法?最好不要尝试将Java转换为JavaScript。我想你是对的。但是,它是一个有用的界面。也许我可以在项目的其他部分使用它。很好!非常感谢。我不知道声明中的
super
约束,只知道
扩展了
。事实上,你确定那不是你的意思吗?
private Square[][] matrix;
private Function[][] matrix;