Java 无法编译FutureTask内部类创建
下面的代码将无法编译(JDK1.8.0_40),我无法理解原因Java 无法编译FutureTask内部类创建,java,generics,concurrency,Java,Generics,Concurrency,下面的代码将无法编译(JDK1.8.0_40),我无法理解原因 public abstract class BackgroundThread<T> { private final ExecutorService executorService = Executors.newFixedThreadPool(1); private final FutureTask<T> task; public <T> BackgroundThread(
public abstract class BackgroundThread<T> {
private final ExecutorService executorService = Executors.newFixedThreadPool(1);
private final FutureTask<T> task;
public <T> BackgroundThread() {
this.task = new FutureTask<T>(new Callable<T>() {
@Override
public T call() throws Exception {
return BackgroundThread.this.perform();
}
});
}
public abstract T perform() throws Exception;
public abstract void onDone();
public abstract void setProgress(int i);
public final void start() {
}
}
公共抽象类背景线程{
私有最终ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
私人最终未来任务;
公共背景线索(){
this.task=newfuturetask(newcallable()){
@凌驾
public T call()引发异常{
返回BackgroundThread.this.perform();
}
});
}
公共抽象T perform()抛出异常;
公开摘要无效onDone();
公共进展摘要(int i);
公开最终作废开始(){
}
}
错误消息:
错误(17,53)Java不兼容类型:无法将T转换为T请从构造函数中删除类型参数,因为它定义了一个类型变量,其范围与类声明中具有相同名称的变量完全不同
T
:
public BackgroundThread() {
从构造函数中删除类型参数,因为它定义了一个类型变量,该类型变量的作用域与类声明中同名的变量
T
完全不同:
public BackgroundThread() {
解决了的!需要删除的是构造函数中的类型参数。Intellij还帮助解决了“类型参数T隐藏类型参数T”的问题!需要删除的是构造函数中的类型参数。Intellij也提供了帮助:“类型参数T隐藏类型参数T”