haXe学习笔记:写一个支持类型参数的静态方法

在Java中,泛型是1.5版本加入的新语言特性,因此只要你不在乎警告或压制了警告,就可以无视它。但在haXe里,类型参数是你无法避免的东西,因为Array<T>你是无论如何也得用的。还好,简单使用起来也很容易,没什么不容易理解的地方。

这里说说我们自己怎么编写支持类型参数的类和方法。

支持类型参数的类有很多例子,比如haXe源码里Array<T>的实现,这里摘录代码片段如下:

class Array<T> {
 function new() : Void;
 function concat( a : Array<T> ) : Array<T>;
 function join( sep : String ) : String;
 function pop() : Null<T>;
 function push(x : T) : Int;
 ...

很简单,只要你在类名后面加上类型参数<T>,编译器就知道后面的成员方法或类属性中的T就是一个类型的占位符,比如上面的concat, pop和push方法中,都引用了这个T作为类型占位符。

 

这是实例方法,但是静态方法中如果有类型参数,则不能这么写,见下面的例子:

public static function reverseIterator<T>(iter: Iterator<T>) : Iterator<T> {
  var all: Array<T> = [];
  for (i in iter) {
   all.push(i);
  }
  all.reverse();
  return all.iterator();
 }
大家可以看到,关键就是在声明中,方法名的后面要加上类型占位符,也就是"<T>",否则的话,编译器不知道后面参数和返回值里的T表示类型参数。

上面例子是一个反向迭代器的简单实现,也算是稍稍弥补下haXe中for语法的缺憾吧,比如你如果想逆向遍历0~10,可以用下面的代码:

for (i in reverseIterator(0...10)) { 
  trace(i);
}

// 输出: 9<换行>8<换行>7<换行>6<换行>5<换行>4<换行>3<换行>2<换行>1<换行>0<换行>

不过这个方法里面要创建数组,效率不太高,图方便可以用一下,呵呵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值