【问题标题】:Implicit coercion of a value of type X to an unrelated type X将类型 X 的值隐式强制转换为不相关的类型 X
【发布时间】:2011-10-19 02:01:10
【问题描述】:


我有这个错误:

将类型 X 的值隐式强制转换为不相关的类型 X

其中 X 是对象的类型,是的,它是 type X to an unrelated type X。 它在我的项目中出现了 6 次,在 3 个不同的 .mxml 文件中,在脚本元素中。它在 3 个我没有编辑的文件中,我更改的文件与有错误的 3 个文件没有链接。

这里有一行代码有问题。

var loadApplicationEvent:LoadApplicationEvent = new LoadApplicationEvent(application);

它在编译和我更改的其他文件时运行完美,它让我出错。

来自 Flash Builder 或 Flex 的错误?还是不行?
我怎样才能搭上它?

【问题讨论】:

  • 至少发布一条显示此错误的行。
  • 您是否正确检查了出现错误的行中变量的数据类型?
  • 我添加了一行错误代码。不会错的!
  • 为自定义事件提供(至少构造函数和标头)代码?
  • 我刚开始在 FB 4.6 中遇到同样的问题。换个文件,报错。再次更改它(添加一个空格,无论如何)并重新保存,现在它可以工作了。清洗,冲洗,重复,一遍又一遍。它每隔一个编译就给出错误。很烦人。

标签: apache-flex flash-builder


【解决方案1】:

当您尝试将不同类型的对象分配给某个变量时会发生这种情况。例如,如果您尝试将字符串 value('4') 分配给需要 int(4) 的对象。查找所有给定的位置并更正类型转换。

【讨论】:

  • 我编辑我的消息并输入一些代码。如果您尝试将字符串 value('4') 分配给预期 int(4) 的对象,错误将是 Implicit coercion of a value of type String to an unrelated type int 但我收到的消息是 Implicit coercion of a value of type String to an unrelated type String
  • @Snote 它们可能是两个不同的String 类。它们都来自同一个命名空间吗?
【解决方案2】:

这是一个隐式转换,但我无法告诉您您提供的信息的确切问题。

var loadApplicationEvent:LoadApplicationEvent = new LoadApplicationEvent(application);

“应用程序”是什么类型的对象,LoadApplicationEvent 构造函数需要什么参数?这就是你的隐含强制发生的地方。我的猜测是“应用程序”与 LoadApplicationEvent 在其构造函数中预期的类型不同。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。我通过禁用“严格类型检查

    解决了这个问题

    项目属性 > ActionScript 编译器 > 启用严格类型检查

    【讨论】:

    • 接受的答案对我不起作用。但这确实做到了。虽然不理想,但至少我可以继续我的工作。
    • 我不明白的是,我的项目已经成功构建了几天,然后突然出现了这些错误。我还必须禁用严格的类型检查才能继续。
    【解决方案4】:

    我最近开始在使用 FlashBuilder 时遇到这个问题,这就是我所做的。

    开始于:

        protected var _foo:FooType;
    (X) public function get foo():FooType { return this._foo; }
    

    (其中 (X) 是 Snote 描述的错误形式,其中 X = FooType)

    改为:

        protected var _foo:FooType;
        public function get foo():* { return this._foo; }
    

    并重建。 * 类型无论如何都会通过类型检查,所以错误消失了。

    然后改回来:

        protected var _foo:FooType;
        public function get foo():FooType { return this._foo; }
    

    然后错误消息会消失,至少会消失一段时间。

    到目前为止,这种技术似乎是可靠的,虽然很烦人。

    【讨论】:

    • 我也遇到了这个问题,但我更简单的解决方案是转到Project -> Clean。这似乎可以解决它。
    • +1 因为这可能是“正确的做法”,但实际上彻底重建大型项目需要更长的时间。接触单个文件的好处是重建通常是优化的,而且修复似乎也能正常工作。
    • 对我来说,清理没有帮助,但 flashbuilder 重新启动修复了它。
    【解决方案5】:

    就我而言,一切都是正确的。因此它看起来是一个 IDE 问题,因为相同的代码工作了几次,而另一次它向我显示了这个错误。您可以尝试几个步骤来解决此问题
    1、清除编译后的代码,重新编译。 (项目选项卡中有一个清除选项)。
    2. 使用相同的代码创建一个文件并删除旧文件。
    3.如果这一切都不起作用,请创建另一个继承基类的类并将期望值更改为*

    示例:

    public class DataGroupOX extends DataGroup ..... public function set itemRenderer2(value:*):void{ value = value as IFactory; super.itemRenderer = value; }

    【讨论】:

      【解决方案6】:

      我自己在使用 Flash Builder 4.5 时遇到了这个问题。返回类型与应有的完全一致。

      对我来说,解决方案是通过以下方式对项目进行全面重建:项目 -> 清理。

      【讨论】:

        猜你喜欢
        • 2014-08-01
        • 2016-09-24
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多