public class Session implements Runnable {
private Handler handler; public Session(Handler handler) {
this.handler = handler;
} @Override
public void run() {
Runnable task = new Runnable() {
@Override
public void run() {
handler.onReceived(this);// 错误!类型 Handler 中的方法onReceived(Session)对于参数(new Runnable(){})不适用
}
};
// handler.onReceived(this); 这样就正确了.
}
}interface Handler {
void onReceived(Session session);
}
哪错了呀,在线等.
onReceived的参数是Session对象
不能隐式转换类型
public class Session implements Runnable {
private Handler handler; public Session(Handler handler) {
this.handler = handler;
} @Override
public void run() {
Runnable task = new Runnable() {
@Override
public void run() {
//handler.onReceived(this);// 因为你是在一个内部类里面使用this,所以这个this指的是task这个对象
//把这个this改成Session.this就行了
handler.onReceived(Session.this);
}
};
// handler.onReceived(this); 这样就正确了.
}
}interface Handler {
void onReceived(Session session);
}
即 外部类类名.this
我传入的是this,即Session的实例啊,你仔细看,我没错啊.
public class Session implements Runnable {
private Handler handler; public Session(Handler handler) {
this.handler = handler;
}
public Session getThisObj() {
return this;
} @Override
public void run() {
Runnable task = new Runnable() {
@Override
public void run() {
handler.onReceived(getThisObj());// 错误!类型 Handler 中的方法onReceived(Session)对于参数(new Runnable(){})不适用
}
};
// handler.onReceived(this); 这样就正确了.
}
}interface Handler {
void onReceived(Session session);
}