-4

我在学习 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 ?

    }  
}
4

3 回答 3

3
Object o = t + r

对象不能(在 99% 的情况下)加在一起,因为这样的行为对大多数对象来说毫无意义。这并不特定于泛型。

您确定要使用泛型,因为您似乎对 T 和 R 表现得好像它们是双精度数(或另一个数字原语)

于 2013-10-28T15:37:20.353 回答
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子类添加在一起(例如整数和浮点数)。

于 2013-10-28T15:44:51.317 回答
0

你可以定义calculator

interface calculator<T extends Number, R extends Number>

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

于 2013-10-28T15:45:40.600 回答