代码之家  ›  专栏  ›  技术社区  ›  cmroanirgo

在ActionScript中模拟内部ctor?

  •  1
  • cmroanirgo  · 技术社区  · 15 年前

    在ActionScript中,所有构造函数都必须是公共的。但是,有时允许用户创建类的新实例是不可行的(因为类可能与物理系统资源、网络套接字等绑定)。

    有人知道有没有办法让类在ActionScript中不可创建?本质上,我的目标是:

    public class SomeClass
    {
        internal function SomeClass():void { }
        . . .
    }
    

    我想我可以通过定义一个接口并在一个内部类中实现它来解决这个问题,但我觉得这样做不对:

    internal class ClassImpl implements ISomeClass
    {
        . . . 
    }
    

    建议?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Extrakun    15 年前

    这里有一个解决方案 a magic number is needed

        2
  •  1
  •   back2dos    15 年前

    这是一个很好的开始,但是对于一个简单的数字,如果您传入数字,它只会抛出运行时错误(加上您猜测正确数字的概率为1/2^64…:D)。。。如果您还希望有编译时错误,请使用此选项(一件愚蠢的事情是,您无法将类型设置为不可为null,因此null将始终是一个有效参数):

    package  {
        public class Test {
            public function Test(enforcer:TestEnforcer) {
                if (enforcer == null) throw "haha, good try ... but, no! :P";
            }
            public static function create():Test {
                //do your cheks here
                return new Test(TestEnforcer.enf);
            }
        }   
    }
    class TestEnforcer {
        public function TestEnforcer() { }
        public static const enf:TestEnforcer = new TestEnforcer();
    }
    

    MyPrivateConstrClass MyPrivateConstrClassImpl 还有一个函数将实例化 ,但该函数的返回值应为

    尔兹

    back2dos