Утро всем
С незапамятных времен человек хотел и изобрел способы выполнения перечислений во Flash AS3.
Было много проблем со многими попытками, такими как возможность использовать конструктор для создания новых типов перечисления (небезопасно).
Я считаю, что следующее является типобезопасным во время компиляции и не может создавать новые экземпляры класса enum во время выполнения.
Основная проблема связана с невозможностью в AS3 иметь приватный конструктор. В этом примере конструктор может быть успешным только в том случае, если ему передана закрытая статическая переменная const ENFORCER, которая видна только внутри класса.
package
{
public class PermissionsEnum
{
private static const ENFORCER = new Object();
public static const READ:PermissionsEnum = new PermissionsEnum(ENFORCER, 1);
public static const WRITE:PermissionsEnum = new PermissionsEnum(ENFORCER, 2);
public static const CREATE:PermissionsEnum = new PermissionsEnum(ENFORCER, 4);
public static const DELETE:PermissionsEnum = new PermissionsEnum(ENFORCER, 8);
private var _value:uint;
public function PermissionsEnum(e:Object, v:uint)
{
if (e != ENFORCER)
throw new Error("Attempted enum security breach.");
this._value = v;
}
public function get value() : uint
{
return this._value;
}
}
}
Комментирует кто-нибудь?
Другие предыдущие попытки позволили использовать некую циркулярную ссылку (что, впрочем, запрещает компилятор Java, а компилятор C #) как попытку запретить создание во время выполнения большего количества значений перечисления. Я думаю, что это более красиво, хотя.
Что мы думаем?
Rich