[Sprawdź dno pytanie o aktualizacjach]Java - Pass metodę do klasy i wykonać go w nowy wątek
Jak w tytule, chciałbym napisać klasę która przyjmuje w metoda i wykonuje ją w nowym wątku. I czai się wokół SO i wymyślił coś takiego:
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();
}
}
}
Jednak Eclipse ostrzega mnie, że wewnątrz konstruktora, w
this.method = pMethod;
I cannot convert from Callable <T> to Callable <T>
.
Pachnie tak, jak robię coś zupełnie nie tak, ale nie mogę tego uchwycić.
UPDATE
Okazuje się, że byłem wyważania otwartych drzwi, co chciałem zrobić, może zostać osiągnięty tak:
public class MyExecutor implements Executor{
@Override
public void execute(Runnable command) {
new Thread(command).start();
}
}
W głównym strumieniu sposób może być wykonywany w nowym wątku tak:
MyExecutor myExec = new MyExecutor();
myExec.execute(new Runnable() {
@Override
public void run() {
myMethod();
}
});
nie można przekazywać metod do innych klas. można przekazywać instancje metod, na których można wywoływać metody – Stultuske
Czy próbowałeś usunąć przed konstruktorem? –
dasblinkenlight
'' 'zanim twój konstruktor deklaruje drugi typ ogólny, zwany także' T'. Jeśli ją usuniesz, kod powinien być w porządku. –
khelwood