看代碼(1)

下面的代碼今天看暈了,應該是用到了泛型(還沒有學,但是看了一些代碼,大大概有一點理解),內部接口(我 自己命名的,不過應該可以這麼叫吧,查了一下有人在問內部接口有什麼好處,和內部類有什麼區別等等,也沒有很好的答覆,不過我覺得這裏這個內部接口應該是 沒有必要暴露給別的類使用吧,既然僅僅是自己用,那就定義爲內部的好了,不過關於內部的接口和內部的靜態接口倒是有一個好玩的,見最後附錄中轉載的一段代 碼吧),慢慢理會:
public class TaskDispatcher {
/**
         * 任務處理器接口
         *
         * @author SYSTEM
         */

        public static interface TaskHandler<T> {

                public void handle(T task);
        }
}

同時這個類裏面還有一個方法,參數中有該接口的對象:
/**
         * 註冊一個任務處理器
         *
         * @param taskClass
         * @param handler
         */

        public <T extends AsyncTask> void registAction(Class<T> taskClass, TaskHandler<T> handler) {
                if (log.isInfoEnabled()) {
                        log.info(" Regist " + handler + " for " + taskClass);
                }
        }

下面是調用這個方法的代碼,在這裏一方面將T實例化了(我自己描述的,僅供自己理解),另一方面將TaskHandler接口實現了:
{
//FlowBranchTask是一個類,它extends AsyncTask
taskDispatcher .registAction(FlowBranchTask.class
new
TaskHandler<FlowBranchTask>() {
public void handle(FlowBranchTask task) {                            
   //實現該方法
                                                                                                                                                                          }                                                                                                  }
);

}



附錄:內部接口和內部靜態接口:

class TestClass {
        public interface I1 {
                void Test1();
        }

        public static interface I2 {
                void Test2();
        }
};

class IImpl1 implements TestClass.I1 {

        @Override
        public void Test1() {
                System.out.println("IImpl Test");
        }
}

class IImpl2 implements TestClass.I2 {

        @Override
        public void Test2() {
                System.out.println("IImp2 Test");
        }
}

public class MyTest {

        /**
         * @param args
         */

        public static void main(String[] args) {
                TestClass.I1 i = new IImpl1();
                i.Test1();

                TestClass.I2 i2 = new IImpl2();
                i2.Test2();
        }

}
結果:
IImpl Test
IImp2 Test
無論內部接口有沒有Static, 都可以正常被實現.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章