AS3 匿名类实现模拟(有类型)

Java 中的匿名类用起来十分灵活,它可以有效地减少类的个数,AS3尚未直接支持匿名类实现,不过它支持闭包,可以借助闭包来模拟Java中的匿名类实现:

要实现匿名类的接口

package zzx.test.flex
{
public interface Interface
{
function i1():void;

function i2(name:String):void;

function i3(value:int):int;

function i4():void;

}
}


写一个实现这个接口的辅助类

package zzx.test.flex {

public class InterfaceAnonymouse implements Interface {

private var _i1:Function;
private var _i2:Function;
private var _i3:Function;
private var _i4:Function;

private function anyCall(func:Function, ...params):*{
if(func == null) return null;
return func.call(this, params);
}

public function i1():void {
anyCall(_i1, arguments);
}

public function i2(name:String):void {
anyCall(_i2, arguments);
}

public function i3(value:int):int {
return anyCall(_i3, arguments);
}

public function i4():void {
anyCall(_i4, arguments);
}

public function InterfaceAnonymouse(i1:Function, i2:Function, i3:Function, i4:Function) {
this._i1=i1;
this._i2=i2;
this._i3=i3;
this._i4=i4;
}

}
}


匿名类实现模拟
public function testInterface():void {

var obj:Object = new Object();
obj.name = "mysh";

var inter:Interface=new InterfaceAnonymouse(function():void {
Alert.show("i1");
}, function(name:String):void {
Alert.show("hello, "+name);
}, function(value:int):int{
return (value+100);
}, null);

inter.i1();
inter.i2(obj.name);
Alert.show(inter.i3(200).toString());
inter.i4();
}


总结

优点
[list]
[*]代码风格与 Java 实现方式类似
[/list]
缺点
[list]
[*]接口需要对应写一个辅助类
[*]闭包方法没有名字
[*]方法闭包缺少完整性约束,如闭包方法参数声明错误需要在运行时才能发现
[/list]
要使用更灵活的方式,可以看看[url=http://mysh.iteye.com/blog/645264]AS3 匿名类实现模拟(无类型)[/url]
如果哪位仁兄有更好的方法,欢迎拍砖 :arrow:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值