泛型方法中的return语句出错

1 java generics methods return

我的问题是每个方法中的return语句,netbeans中的错误说:

线程"main"中的异常java.lang.RuntimeException:无法编译的源代码 - 二元运算符的错误操作数类型'+'第一类型:T第二类型:GenericMath.ad中的GenericMath.add(GenericMath.java:8)处的T(GenericMath)的.java:20)

public class GenericMath<T> {
    public T a,b;

    public T add() {
        return a+b;
    }

    public T multiply() {
        return (a*b);
    }

    public static <T> void main(String[] args) {

        GenericMath<Integer> x=new GenericMath<Integer>();
        x.a=5;
        x.b=10;
        int z=x.add();

       GenericMath<Double> y = new GenericMath<Double>();
       y.a = 5.5;
       y.b = 10.2;
       double g=y.multiply();

    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

编译器不知道你可以乘法和添加T值 - 它不是return问题的一部分,而是表达式本身.如果拆分这两部分,你会看到相同的效果:

T result = a + b;
return result;
Run Code Online (Sandbox Code Playgroud)

这将是第一条失败的路线 - 并且没有特别干净的答案.泛型不仅仅是为Java中的这种工作而构建的.你可以做的是有:

public abstract class GenericMath<T extends Number> {
    public abstract T add(T a, T b);
    public abstract T multiply(T a, T b);
    // etc
}

public final class IntegerMath extends GenericMath<Integer> {
    public Integer add(Integer a, Integer b) {
        return a + b;
    }

    // etc
}
Run Code Online (Sandbox Code Playgroud)

...和类似的类DoubleMath

然后:

// Alternatively, have a static factory method in GenericMath...
GenericMath<Integer> math = new IntegerMath();
int x = math.add(5, 2);
Run Code Online (Sandbox Code Playgroud)