インタフェースのコールバックを振り返る:Interface CallBackの2つの簡単な思考

8794 ワード

  • 問題の説明
  • 書き方1-インタフェース単独書き
  • 書き方2-インタフェースはクラスに
  • と書きます.



    今日また1人の高校の学友がいて、Javaに接触したばかりの友达が私にいくつかの问题を闻いて、それからインタフェースのコールバックを闻いて、私は彼に说明して、ついでに少し时间があって、手当たり次第に书いて、简単な小さいケースが必要なみんなを助けることができることを望みます.
    問題の説明:
  • 1.王さんは李さんに質問します.
  • 2.李さんはすぐに答えられないので、
  • を計算する必要があります.
  • 3.王さんは急いで游んでいたので、闻き终わって行ってしまった.
  • 4.李さんは答えを出したら、王さんに答えをあげます.

  • 1-書き方インタフェース単独書き:
  • 1.インターフェイス:CallBack.java
  • //  ,    /    (      )     ,        。
    public interface CallBack {
        public void solve(String result);
    }
  • 2.Wang.java
  • //     
    public class Wang implements CallBack {
        Li li;
    
        public Wang(Li li) {
            this.li = li;
        }
    
        public void askQuestion(final int num) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    li.executeMessage(Wang.this, num);
                }
            }).start();
            //          ,      
            goPlay();
        }
    
        private void goPlay() {
            System.out.println("    ,    ,   ...");
        }
    
        @Override
        public void solve(String result) {
            System.out.println("      : " + result);
        }
    }
  • 3.Li.java
  • public class Li {
    
        public void executeMessage(CallBack callBack, int num) {
            System.out.println("      : "+num);
    
            //    
            int count = 0;
            for (int i = 0; i < num; i++) {
                if (i > 0 && i % 2 == 0) {
                    count++;
                }
            }
    
            String reslut = "   "+count;
    
            //    ,    
            callBack.solve(reslut);
        }
    }
  • Test.java
  • public class Test {
        public static void main(String[] args) {
            Wang wang = new Wang(new Li());
            wang.askQuestion(1000);
        }
    }

    印刷結果:
        ,    ,   ...
          : 1000499

    書き方2-インタフェースはクラスに書きます.
  • Wang.java
  • //     
    public class Wang implements CallBack {
        Li li;
    
        public Wang(Li li) {
            this.li = li;
        }
    
        public void askQuestion(final int num) {
            //  
            new Thread(new Runnable() {
                @Override
                public void run() {
                //    ,        。
                    li.setCallBack(new Li.CallBack() {
                        @Override
                        public void solve(String result) {
                            System.out.println("      : " + result);
                        }
                    });
                    //       。
                    li.executeMessage(num);
                }
            }).start();
        //     ,  
            goPlay();
        }
    
        private void goPlay() {
            System.out.println("    ,    ,   ...");
        }
  • Li.java
  • public class Li {
    
        //public void executeMessage(CallBack callBack, int num),     ,     。
        public void executeMessage(int num) {
            System.out.println("        : " + num);
    
            //    
            int count = 0;
            for (int i = 0; i < num; i++) {
                if (i > 0 && i % 2 == 0) {
                    count++;
                }
            }
    
            String reslut = "   " + count;
    
            //        :    ,    
            callBack.solve(reslut);
        }
        //      
        public interface CallBack {
            void solve(String result);
        }
    
        private CallBack callBack;
    
        public void setCallBack(CallBack callBack) {
            this.callBack = callBack;
        }
    }
  • Test.java
  • public class Test {
        public static void main(String[] args) {
            Wang wang = new Wang(new Li());
            wang.askQuestion(1000);
        }
    }

    出力結果:
        ,    ,   ...
            : 1000499