【问题标题】:ActionScript 3 object's property name to string?ActionScript 3 对象的属性名称为字符串?
【发布时间】:2011-03-18 15:13:43
【问题描述】:

我想消除在这些中使用魔术字符串

BindingUtils.bindProperty(obj1, "propertyName", obj2, ["childObj", "anotherProperty"]);

var ddl:DropDownList = new DropDownList();
ddl.labelField = "propertyName";

只要输入类似这样的内容会很甜蜜:

ddl.labelField = GetPropertyName(ComplexType.propertyName);

它将允许轻松重构,并在属性名称更改时消除运行时错误。

有什么想法吗?

【问题讨论】:

  • 我不明白您建议的术语更改如何消除与重构相关的运行时错误。
  • 如果我用 IDE 的重命名重构属性名称“propertyName”,比如“propertyName2”,它会在函数“GetPropertyName”的调用中找到并更改它......但是如果我重构/现在重命名,IDE 不会将此魔术字符串识别为我刚刚更改属性名称的类的属性。简单地重构/重命名属性会产生运行时错误。

标签: flash apache-flex actionscript-3 reflection magic-string


【解决方案1】:

不确定我是否正确理解了您的问题。您可以轻松地在单独的类中定义静态常量以消除所有魔术字符串。

// 在类常量容器中 公共静态常量 PROPERTY_NAME:String = "propertyName"; // 在其他任何地方 ddl.labelField = ConstantContainer.PROPERTY_NAME;

【讨论】:

  • 我认为它并没有消除魔术字符串的使用,它只是将它移动到另一个类:/它在重构属性名称后中断。
  • 它有一些好处。它可以防止可能导致运行时崩溃的拼写错误。如果你需要使用魔术字符串,比如在 20 个位置,那么如果该字符串需要更改,那么你需要找到所有 20 个位置。但是,如果您使用单个类,那么显然您只需要在一个地方进行更改,这样就不太容易出错。
【解决方案2】:

需要'魔术字符串'。请记住,这是一种动态语言,对所有事物都有利有弊。这是其中一个缺点。

您可以采取一些措施来限制静态属性等错误。

【讨论】:

    【解决方案3】:

    关于类似主题的 Stack Overflow 讨论以及您可能感兴趣的一些想法:

    Use of object vs string vs enum

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 2013-05-30
      相关资源
      最近更新 更多