Java Generic中的操作问题

时间:2013-10-28 15:33:18

标签: java generics

我在学习Java Generic时遇到了一些问题:

interface calculator<T, R> {
 public void execute(T t, R r);
}

class executeAdd<T, R> implements calculator<T, R> {
    private T first;
    private R second;

    public executeAdd(T first, R second) {
        super();
        this.first = first;
        this.second = second;
    }

    @Override
    public void execute(T t, R r) {
        // TODO Auto-generated method stub

        Object o = t + r //  ERROR ! What i could do it ?

    }  
}

3 个答案:

答案 0 :(得分:3)

Object o = t + r

对象不能(在99%的情况下)被加在一起,因为这样的行为对于大多数对象来说是没有意义的。这不是Generics特有的。

你确定你想要使用泛型,因为你似乎对T和R表现得好像它们是双打(或者是其他数字原型)

答案 1 :(得分:1)

如果这是一个数字计算器,我想你想要的是以下内容:

interface Calculator<T extends Number, R extends Number> {
    public void execute(T t, R r);
}

class ExecuteAdd<T extends Number, R extends Number> implements
        Calculator<T, R> {
    private final T first;
    private final R second;

    public ExecuteAdd(final T first, final R second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public void execute(final T t, final R r) {
        // Check if integer, then add together as integer
        if (t instanceof Integer && r instanceof Integer) {
            final Integer result = t.intValue() + r.intValue();
        } else if (...) {
            // And so on with all subclasses of Number
        }
    }
}

这首先将泛型声明为Number的子类(它是Java中所有数字类的父类)。这样,您首先要确保实际上可以添加传递的对象。

这不是一个非常优雅的解决方案,也不考虑将不同的Number子类添加到一起(例如,浮点数为整数)。

答案 2 :(得分:0)

您可以将calculator定义为

interface calculator<T extends Number, R extends Number>

这样您可以使用.xValue方法进行计算。