通用可调用

时间:2013-04-08 16:45:38

标签: java generics callable

我正在尝试实现一个通用的callable来委派不同类型帐户的修改。 代码如下所示:

import java.util.concurrent.Callable;
class Task<T extends BaseAccount> extends Callable<T extends BaseAccount> {

  private final T t;

  public Task(T t) {
    this.t = t;
  }

  @Override
  public T call() throws Exception {
    t.increment();
    return t;
  }

}

BaseAccount只是一个抽象类,如下所示:

abstract class BaseAccount {
  abstract public void increment();
}

但显然我没有到达那里,因为我看到很多与泛型有关的编译错误。 希望得到帮助。

1 个答案:

答案 0 :(得分:6)

首先,在类中,您不扩展接口,而是实现它。其次,您无需在T部分重复BaseAccount延伸Callable。就这样做:

class task<T extends BaseAccount> implements Callable<T>

修改

<T extends BaseAccount>类声明中的task是您声明泛型类型参数T的地方,因此这里的边界限制是合适的。但implements Callable<T>只是对类型参数T的引用,就像使用T的类中的其他地方一样 - 实例变量声明,构造函数和方法。

此外,java类名称通常以大写字母开头,例如Task,但这对于解决编译器错误并不重要。