Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法编译FutureTask内部类创建_Java_Generics_Concurrency - Fatal编程技术网

Java 无法编译FutureTask内部类创建

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(

下面的代码将无法编译(JDK1.8.0_40),我无法理解原因

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”