当前位置: 首页 > 面试题库 >

Java泛型并将数字加在一起

赏彭薄
2023-03-14
问题内容

我想一般地在java中添加数字。我遇到了麻烦,因为Numbers类并不真正支持我想做的事情。到目前为止,我尝试过的是:

public class Summer<E extends Number> {


    public E sumValue(List<E> objectsToSum) {
        E total = (E) new Object();
        for (E number : objectsToSum){
            total += number;
        }
        return null;

    }

显然这是行不通的。我该如何更正此代码,以便获得<int>或列表,或<long>返回任何值?


问题答案:

为了一般地计算总和,您需要提供两个操作:

  • 一种将零项相加的方法
  • 一种将两项相加的方法

在Java中,您可以通过接口进行操作。这是一个完整的示例:

import java.util.*;

interface adder<T extends Number> {
    T zero(); // Adding zero items
    T add(T lhs, T rhs); // Adding two items
}

class CalcSum<T extends Number> {
    // This is your method; it takes an adder now
    public T sumValue(List<T> list, adder<T> adder) {
        T total = adder.zero();
        for (T n : list){
            total = adder.add(total, n);
        }
        return total;
    }
}

public class sum {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(4);
        list.add(8);
        CalcSum<Integer> calc = new CalcSum<Integer>();
        // This is how you supply an implementation for integers
        // through an anonymous implementation of an interface:
        Integer total = calc.sumValue(list, new adder<Integer>() {
            public Integer add(Integer a, Integer b) {
                return a+b;
            }
            public Integer zero() {
                return 0;
            }
        });
        System.out.println(total);
    }
}


 类似资料:
  • 问题内容: 我一直在努力解决以下问题。我有一系列函数对象,每个对象都有自己的输入和输出类型,这些输入和输出类型是通过java中的泛型类型参数定义的。我想将它们排列成一个链,以便将原始数据输入到第一个函数,然后将其转换为输出类型,即下一个对象的输入类型,依此类推。当然,这对于硬代码来说是微不足道的,但是我希望代码可以插入到新的函数对象中。如果我只是忽略类型参数(仅最终输出类型),则外观如下: 这里,

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 问题内容: 我尝试用泛型创建一个抽象类。业务逻辑是将文本从一种语言翻译成另一种语言。每种语言都必须有一个课程。对于每种语言,我还需要一个类,该类是方法的返回对象,它具有参数。T应该是(例如EnglishText,ChineseText等)的子类。那就是我奋斗的地方。您如何编码此约束? 我创建了以下超级类。 如果我误解了泛型的概念或将其错误地使用,请说明一下。谢谢。 问题答案: 只需将其添加到定义泛

  • 问题内容: 我想知道是否有可能编写一个接受多种通用类型的函数,如下所示: 那行得通吗?每个参数中的泛型是否意味着每个参数必须具有与泛型相同的类型T? 问题答案: 是的-可能的(虽然不是使用方法签名),是的,使用签名的类型必须相同。 使用给定的签名,必须在呼叫站点将其与单个类型(例如 或 )相关联。但是,您可以声明采用多个类型参数的方法签名 请注意,在上面的签名中,我已经声明了类型以及签名本身。因此

  • 问题内容: 更新: 感谢所有提供帮助的人-这个答案的答案在于我在更复杂的代码中没有注意到的内容以及对Java5协变量返回类型不了解的内容。 原始帖子: 今天早上我一直在玩一些东西。虽然我知道我 可以用 不同的方式解决整个问题,但我发现自己一直迷恋于弄清楚为什么它没有按我预期的那样工作。在花了一些时间阅读这些内容之后,我发现我离理解还很近,因此我将其作为一个问题来看看我是否只是愚蠢,或者是否真的有我

  • 问题内容: 我的任务是用Java编写哈希表,该哈希表必须适用于任何数据类型。我正在编写的代码规则如下:-哈希表必须具有一个数组作为基础数据结构,其大小在构造对象时确定- 发生冲突时,应该放置碰撞的元素链接列表,该列表包含哈希表中该索引(键)处的所有元素 因此,对于基础数据类型,我做了一个LinkedList类型的数组(自定义,不是Java API LinkedList)。 当然,问题是实例化此数组