Object Haxe:iterables的空对象模式

Object Haxe:iterables的空对象模式,object,design-patterns,null,haxe,iterable,Object,Design Patterns,Null,Haxe,Iterable,我想为Iterable类实现空对象设计模式。例如,如果我的内部数组没有初始化,包装器类无论如何都会返回不破坏主逻辑的空迭代器: public function iterator():Iterator<T> { // ...of cause it doesn't work, because Iterator is typedef not class return mList != null ? mList.iterator() : new Iterator<T>()

我想为Iterable类实现空对象设计模式。例如,如果我的内部数组没有初始化,包装器类无论如何都会返回不破坏主逻辑的空迭代器:

public function iterator():Iterator<T> {
  // ...of cause it doesn't work, because Iterator is typedef not class
  return mList != null ? mList.iterator() : new Iterator<T>();
}

var mList:Array<T>;
公共函数迭代器():迭代器{
//…当然,它不起作用,因为迭代器是typedef而不是类
return mList!=null?mList.iterator():new iterator();
}
var-mList:数组;

我应该用所需类型的项或其他实现迭代器接口但不包含任何内容的东西实例化静态空伪数组吗?或者可能有更直接的解决方案?

您可以通过添加某种isEmpty函数,在object类本身中进行正手检查:

public function isEmpty():Bool {
  return mList == null || mList.length == 0;
}
然后像这样使用它:

if(!iter.isEmpty()) {
  for(i in iter) {
    trace(i);
  }
}
例如:

您可以为此使用虚拟迭代器:

class NullIterator  {
    public inline function hasNext() return false;
    public inline function next() return null;
    public inline function new() {}
}
。。像这样使用它

public function iterator():Iterator<T> {
  return mList != null ? mList.iterator() : new NullIterator();
}
公共函数迭代器():迭代器{
return mList!=null?mList.iterator():新的null迭代器();
}
例如:

如果您认为应该改变行为,那么可以在Github上提出问题。

您可以通过添加某种isEmpty函数,在object类本身中进行正手检查:

public function isEmpty():Bool {
  return mList == null || mList.length == 0;
}
然后像这样使用它:

if(!iter.isEmpty()) {
  for(i in iter) {
    trace(i);
  }
}
例如:

您可以为此使用虚拟迭代器:

class NullIterator  {
    public inline function hasNext() return false;
    public inline function next() return null;
    public inline function new() {}
}
。。像这样使用它

public function iterator():Iterator<T> {
  return mList != null ? mList.iterator() : new NullIterator();
}
公共函数迭代器():迭代器{
return mList!=null?mList.iterator():新的null迭代器();
}
例如:

如果您认为应该改变行为,那么可以在Github上提出问题。