[Kiểm tra dưới cùng của câu hỏi cho bản cập nhật]Java - Vượt qua một phương pháp để một lớp học và thực hiện nó trong một bài viết mới
Như trong tiêu đề, tôi muốn viết một lớp mà mất trong một phương thức và thực thi nó trong một Thread mới. Tôi lẩn quất quanh SO và đã đưa ra một cái gì đó như:
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();
}
}
}
Tuy nhiên Eclipse cảnh báo tôi rằng, bên trong constructor, trong
this.method = pMethod;
tôi cannot convert from Callable <T> to Callable <T>
.
Có mùi như tôi đang làm điều gì đó hoàn toàn sai, nhưng tôi không thể hiểu được.
CẬP NHẬT
Hóa ra tôi đã reinventing the wheel, những gì tôi muốn làm có thể đạt được như thế này:
public class MyExecutor implements Executor{
@Override
public void execute(Runnable command) {
new Thread(command).start();
}
}
Trong dòng chảy chính là một phương pháp có thể được thực hiện trong một chủ đề mới như thế này:
MyExecutor myExec = new MyExecutor();
myExec.execute(new Runnable() {
@Override
public void run() {
myMethod();
}
});
bạn không thể chuyển các phương thức cho các lớp khác. bạn có thể chuyển các thể hiện của các phương thức mà bạn có thể gọi các phương thức – Stultuske
Bạn đã thử xóa ở phía trước của hàm tạo không? –
dasblinkenlight
'' trước khi hàm tạo của bạn khai báo kiểu chung thứ hai, còn được gọi là 'T'. Nếu bạn xóa nó, mã của bạn sẽ ổn. –
khelwood