看代码(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, 都可以正常被实现.

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