mule有一个类,叫AbstractOutboundRouter,在里面有个dispatch方法,方法里面有这么一行代码
TransactionCallback cb = new TransactionCallback()
而TransactionCallback却是一个interface...我被这个用法搞糊涂了,在java里面,interface不是不能被实例化的么?那为什么他这里却能这样用呢?
TransactionCallback的定义如下:
package org.mule.api.transaction;public interface TransactionCallback
{
Object doInTransaction() throws Exception;
}
TransactionCallback cb = new TransactionCallback()
而TransactionCallback却是一个interface...我被这个用法搞糊涂了,在java里面,interface不是不能被实例化的么?那为什么他这里却能这样用呢?
TransactionCallback的定义如下:
package org.mule.api.transaction;public interface TransactionCallback
{
Object doInTransaction() throws Exception;
}
多态
你自己写一个类实现这个接口,然后你得写里面的方法,再把这个类赋给TransactionCallback
系统只调用TransactionCallback的doInTransaction()方法,不就调用到你写的类的doInTransaction方法上了
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() 看看)