简单的 Java 重写方法

发布于 2024-10-18 05:01:15 字数 529 浏览 1 评论 0原文

我想知道是否可以以更简单的方式重写 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();
    }

我想知道是否有办法将其推广到其他数字变量(除了上面列出的形式之外。)

I was wondering if it is possible to override Java methods in a simpler way. My basic problem is that I have a collection of methods, an example can be calculating the mean of an array of values. My problem is that I want to have this method work for all number variables types (int long double float etc.) Is there any way to do this besides creating:

  1. A new method for each parameter type
  2. Having those new methods call one base method with parsed parameters

Any help is appreciated.

When reviewing the answer, I noticed that I have been using generics, I just didn't know what they were called. Here is an example of my mean snippet.

   public double arithmeticMean(List<Double> data) {

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

I was wondering if there was anyway to generalize this to other number variables (besides the forms listed above.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奶气 2024-10-25 05:01:15

您是否研究过使用泛型并为 DoubleFloatInteger 等定义新的计算器对象?

Have you investigated using generics and define a new calculator object for Double, Float, Integer etc. ?

淑女气质 2024-10-25 05:01:15

正如布莱恩所说,仿制药将是实现这一目标的最佳方法。要实现 LinkedList 的平均值(不确定是否有办法用数组来实现此目的):

public double mean(LinkedList<? extends Number> numbers) {
  double sum = 0.0;
  for(Number n : numbers) sum += n.doubleValue();
  return sum / (double)numbers.size();
}

As Brian said, generics would be the best way to do this. To do the mean of a LinkedList (not sure if there's a way to do this with arrays or not):

public double mean(LinkedList<? extends Number> numbers) {
  double sum = 0.0;
  for(Number n : numbers) sum += n.doubleValue();
  return sum / (double)numbers.size();
}
习惯成性 2024-10-25 05:01:15

你可以写这样的东西:

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

You can write something like that:

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()));
}

The usage would be:

List<Double> list = new ArrayList<Double>();
list.add(1d);
list.add(5d);
System.out.println(getMean(list)); // 3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文