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);
}
哪错了呀,在线等.

解决方案 »

  1.   

    task是Runnable匿名实现类的对象
    onReceived的参数是Session对象
    不能隐式转换类型
      

  2.   


    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);
    }
      

  3.   

    在内部类中使用外部类this对象要加上外部类的类名
    即  外部类类名.this
      

  4.   


    我传入的是this,即Session的实例啊,你仔细看,我没错啊.
      

  5.   

    为了测试,你这样试试看。
    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);
    }
      

  6.   

     handler.onReceived(this);// 错误!类型 Handler 中的方法onReceived(Session)对于参数(new Runnable(){})不适用当然是错的。这个this就不是Session了,而是你写的匿名类,你写成Session.this就可以了。