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

Posted

技术标签:

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

嗨我有这个错误:

其中 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 中遇到同样的问题。换个文件,报错。再次更改它(添加一个空格,无论如何)并重新保存,现在它可以工作了。清洗,冲洗,重复,一遍又一遍。它每隔一个编译就给出错误。很烦人。 【参考方案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 时遇到了这个问题。返回类型与应有的完全一致。

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

【讨论】:

以上是关于将类型 X 的值隐式强制转换为不相关的类型 X的主要内容,如果未能解决你的问题,请参考以下文章

1067:将 void 类型的值隐式强制转换为不相关的类型 Function

C++ --- 强制转换运算符

java 强制类型转换的规则是啥?

JS强制类型转换,隐式类型转换, == 和===的区别

Python变量类型的强制转换

显示类型与隐式类型