Java泛型并将数字加在一起 [英] Java Generics and adding numbers together
本文介绍了Java泛型并将数字加在一起的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想通常在java中添加数字。我遇到了困难,因为Numbers类并不真正支持我想要做的事情。我迄今试过的是这样的:
public class Summer< E extends Number> {
public E sumValue(List< E> objectsToSum){
E total =(E)new Object(); (E号码:objectsToSum){
total + = number;
}
返回null;
}
显然这是行不通的。我该如何纠正这段代码,这样我可以得到一个< int>
或< long>
或其他什么并返回总和?
解决方案
为了总体计算总和,您需要提供两个操作: p>
- 总计零项的方法
- 总计两项的方法
- 总计两项的方法
在Java中,您可以通过界面进行操作。这是一个完整的例子:
import java.util。*;
接口加法器< T extends Number> {
T zero(); //添加零项
T add(T lhs,T rhs); //添加两个项目
}
类CalcSum< T extends Number> {
//这是你的方法;现在需要一个加法器
public T sumValue(List< T> list,adder< T> adder){
T total = adder.zero(); (T n:list)
{
total = adder.add(total,n);
}
总回报;
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<整数> calc = new CalcSum< Integer>();
//这是通过匿名实现一个接口为整数
//提供实现的方式:
整数总数= calc.sumValue(列表,新加法器<整数>(){
public Integer add(Integer a,Integer b){
return a + b;
}
public Integer zero(){
return 0;
}
});
System.out.println(total);
}
}
I would like to generically add numbers in java. I'm running into difficulty because the Numbers class doesn't really support what I want to do. What I've tried so far is this:
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;
}
Obviously this will not work. How can I go about correcting this code so I could be given a list of <int>
or <long>
or whatever and return the sum?
解决方案
In order to calculate a sum generically, you need to provide two actions:
- A way to sum zero items
- A way to sum two items
In Java, you do it through an interface. Here is a complete example:
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泛型并将数字加在一起的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文