Java - 将方法传递给 class 并在新线程中执行

Java - Pass a method to a class and execute it in a new Thread

[检查问题底部是否有更新]

如标题所示,我想写一个 class 接受一个方法并在新线程中执行它。我潜伏在周围,想出了类似的东西:

import java.util.concurrent.Callable;

public class MyExecutor<T> implements Runnable{

    private Callable<T> method;


    public <T> MyExecutor(Callable<T> pMethod){
        this.method = pMethod;
    }

    @Override
    public void run() {
        try {
            // start a new Thread, then
            method.call();
        } catch (Exception e) {
            System.err.println("Failed calling method "+method.getClass());
            e.printStackTrace();
        }

    }

}

但是 Eclipse 警告我,在构造函数中,在

this.method = pMethod;

cannot convert from Callable <T> to Callable <T>.

感觉我做的事情完全错了,但我无法理解。

更新

原来我是在重新发明轮子,我想做的可以这样实现:

public class MyExecutor implements Executor{


    @Override
    public void execute(Runnable command) {
        new Thread(command).start();
    }

}

在主流程中,一个方法可以像这样在一个新线程中执行:

    MyExecutor myExec = new MyExecutor();

    myExec.execute(new Runnable() {

        @Override
        public void run() {
            myMethod();
        }
    });

由于您向构造函数添加了类型参数 <T>,因此它隐藏了 class 的类型参数。因此,构造函数参数 pMethodT 与 class 参数不同 T,这是 Eclipse 警告您的内容。只需将构造函数的签名更改为 public MyExecutor(...).