使用泛型类来执行基本的算术运算

Tin*_*iny 11 java generics

我想用只有一个每个操作的通用方法,包装类型等而进行像加,减,乘,除基本的算术运算Integer,Float,Double...(不BigDecimalBigInteger).

我尝试使用泛型类做类似以下的事情(用于添加).

public final class GenericClass<E extends Number> {

    public E add(E x, E y) {
        return x + y; // Compile-time error
    }
}
Run Code Online (Sandbox Code Playgroud)

它发出编译时错误,

operator +不能应用于E,E

有没有办法使用这样的通用版本来实现这样的操作?

Lou*_*man 12

不,没有办法做到这一点,否则它将被内置到Java中.类型系统不足以表达这种事情.


Syl*_*inL 6

不,你不能这样做,因为+运算符不是Number类的一部分.你可以做的是创建一个抽象基类并从中扩展:

static void test() {

    MyInteger my = new MyInteger();
    Integer i = 1, j = 2, k;
    k = my.add(i, j);
    System.out.println(k);
}

static public abstract class GenericClass<E extends Number> {
    public abstract E add(E x, E y);
}

static public class MyInteger extends GenericClass<Integer> {
    @Override
    public Integer add(Integer x, Integer y) {
        return x + y;
    }       
}
Run Code Online (Sandbox Code Playgroud)

(我将这些类设置为静态以便于测试,但您可以删除此修饰符.)

您还可以添加一个抽象函数,该函数将获取并返回参数并返回Number类型的值并覆盖它和子类,但返回值所需的转换将失去其用途.