我在学习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 ?
}
}
答案 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
方法进行计算。