Единственный способ передать его в общем виде и сохранить его как примитивный массив как Object
. Лично я просто перегружал его и рассматривал его как стоимость использования примитивов.
Чтобы избежать дублирования кода в алгоритме (если это много кода) вы можете создать абстрактный класс что-то вроде DoubleAlgorithm
с абстрактными методами, как double getElement(int i, int j)
и handleResult(double result)
, а затем написать очень маленькие подклассы этого, по одному для каждого примитивный тип.
Позвольте мне объяснить с помощью примера (предположим, что алгоритм добавлял числа).
public int filter(int [][] values) {
IntAlgorithm algo = new IntAlgorithm(values);
algo.run();
return algo.getResult();
}
public double filter(double [][] values) {
DoubleAlgorithm algo = new DoubleAlgorithm(values);
algo.run();
return algo.getResult();
}
public class AbstractAlgorithm {
public run() {
double sum = 0.0;
for(int i=0; i<rows(); i++) {
for(int j=0; j<columns(i); j++) {
sum+=getElement(i, j);
}
}
handleResult(sum);
}
protected abstract int rows();
protected abstract int columns(int row);
protected abstract double getElement(int i, int j);
protected abstract void handleResult();
}
public class IntAlgorithm extends AbstractAlgorithm {
int [][] values;
int result;
IntAlgorithm(int [][] values) {
this.values= values;
}
public int rows() {
return values.length;
}
public int columns(int row) {
return values[row].length;
}
public double getElement(int i, int j) {
return values[i][j];
}
public void handleResult(double result) {
this.result = (int)result;
}
public int getResult() {
return result;
}
}
Как вы можете видеть, это довольно многословие, но если бы ваш алгоритм был большим, это могло бы стоить того. Надеюсь, это очевидно, как перейти к вашему алгоритму.
Как отметил Тило, небезопасно делать все алгоритмы, просто рассматривая ints/longs как парные, но для числа это будет достаточно хорошо. Если это не для вас, вам нужно сделать еще более подробный, выяснить, какие свойства нужных вам чисел (например, добавить) и извлечь их в отдельный интерфейс. Для медианного фильтра я ожидал бы, что использование удвоений будет работать нормально, но я бы проверил краевые случаи.
Он может передать его как объект [] (с одним измерением) – Thilo
Можете ли вы дать образец кода для второй части вашего предложения? – jayakumar
сделано. Я даже не скомпилировал это, но, надеюсь, вы получите идею –