mule有一个类,叫AbstractOutboundRouter,在里面有个dispatch方法,方法里面有这么一行代码
TransactionCallback cb = new TransactionCallback()
而TransactionCallback却是一个interface...我被这个用法搞糊涂了,在java里面,interface不是不能被实例化的么?那为什么他这里却能这样用呢?
TransactionCallback的定义如下:
package org.mule.api.transaction;public interface TransactionCallback
{
    Object doInTransaction() throws Exception;
}

解决方案 »

  1.   

    接口方式实现方法回调嘛
    多态
    你自己写一个类实现这个接口,然后你得写里面的方法,再把这个类赋给TransactionCallback
    系统只调用TransactionCallback的doInTransaction()方法,不就调用到你写的类的doInTransaction方法上了
      

  2.   

    你想干吗就可以在doInTransaction里面干吗了不就扩展了嘛 
      

  3.   

    你说的是我如果有一个实现类实现了TransactionCallback这个接口,假定为TransactionCallbackImpl类,那可以通过TransactionCallback cb=new TransactionCallbackImpl()来实现方法回调,但我说的意思是他这里直接new了TransactionCallback这个接口来生成一个接口的实例,这样好像违背了接口不能实例化的原则吧?
      

  4.   

    额没人来指点下么到底在什么情形下可以使用new一个interface的实例这种方式呢?
      

  5.   


    interface A{
       public void a();
    }class AImpl implements A{
       public void a(){
          do sth 
       }
    }A a = new AImpl(); //多态
    a.a(); //调用的是AImpl类的a(),所以嘛,你可以自己写一个实现类,实现A,然后在a()里想干吗就干吗//有另一个简便写法
    A a = new A(){
       public void a(){
          do sth  
       }
    };   //这里new的也不是接口A(接口不能new),而是它的一个实现类,java帮你做了这个事(你可以getClass().getName() 看看)
      

  6.   

    楼主看mule怎么样了?我最近也想看看
      

  7.   

    同求  我最近用mule也是这样 发现了这个不太明白