Простые методы переопределения Java - PullRequest
0 голосов
/ 17 февраля 2011

Мне было интересно, возможно ли переопределить методы Java более простым способом.Моя основная проблема заключается в том, что у меня есть набор методов, примером может быть вычисление среднего значения массива значений.Моя проблема в том, что я хочу, чтобы этот метод работал для всех типов числовых переменных (int long double float и т. Д.). Есть ли способ сделать это, кроме создания:

  1. Новый метод для каждого типа параметра
  2. Когда эти новые методы вызывают один базовый метод с проанализированными параметрами

Любая помощь приветствуется.

При просмотре ответа я заметил, что использую дженерикиЯ просто не знал, как они назывались.Вот пример моего среднего фрагмента.

   public double arithmeticMean(List<Double> data) {

        double sum = 0;
        for (double number : data)
            sum += number;
        return sum / data.size();
    }

Мне было интересно, можно ли вообще обобщить это для других числовых переменных (кроме форм, перечисленных выше).

Ответы [ 3 ]

4 голосов
/ 17 февраля 2011

Вы исследовали с помощью обобщений и определили новый объект калькулятора для Double, Float, Integer и т. Д.?

2 голосов
/ 17 февраля 2011

Как сказал Брайан, дженерики - лучший способ сделать это. Чтобы понять значение LinkedList (не уверен, есть ли способ сделать это с массивами или нет):

public double mean(LinkedList<? extends Number> numbers) {
  double sum = 0.0;
  for(Number n : numbers) sum += n.doubleValue();
  return sum / (double)numbers.size();
}
1 голос
/ 17 февраля 2011

Вы можете написать что-то подобное:

public static <T extends Number> BigDecimal getMean(final List<T> numbers) {
    BigDecimal sum = BigDecimal.ZERO;

    for (T t : numbers) {
        sum = sum.add(new BigDecimal(t.doubleValue()));
    }

    return sum.divide(new BigDecimal(numbers.size()));
}

Использование будет:

List<Double> list = new ArrayList<Double>();
list.add(1d);
list.add(5d);
System.out.println(getMean(list)); // 3
...