Я определил для своего проекта функциональный интерфейс под названием Function
. Она имеет только один метод, call
, как это:Создание функционального интерфейса, работающего с разными типами объектов
public interface Function {
public void call();
}
И в моем поле объекта, у меня есть это:
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);
}
}
}
}
Он отлично работает, и это напоминает 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();
}
}
}
Это будет придавать определенный кусок кода (в данном случае реализация функции) для каждого элемента матрицы. Таким образом, я могу получить доступ к его свойствам. Но каждый объект матрицы является квадратом. Как я могу получить к нему доступ? Я мог бы передать его функции,
//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
типа. Может быть, я мог бы использовать общие типы?
... Да, дженерики - вот как вы решаете эту проблему? –
Возможно, вам лучше не пытаться превратить Java в JavaScript. – Raedwald
Угадайте, что вы правы. Но, это полезный интерфейс. Возможно, я использую его в других частях проекта. – thepanuto