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

8

你好
我遇到了这个错误:

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

其中 X 是对象的类型,是 类型 X 转换为不相关的类型 X。在我的项目中共出现了 6 次,在 3 个不同的 .mxml 文件中的 script 元素中。这个问题出现在我没有编辑的 3 个文件中,而我更改的文件与这 3 个带有错误的文件没有关联。

以下是一行代码的问题所在:

var loadApplicationEvent:LoadApplicationEvent = new LoadApplicationEvent(application);

一切都运行得很完美,但当我编译另一个我修改过的文件时,出现了错误。

这是来自Flash Builder或Flex的Bug吗?还是其他问题?
我该如何解决它?


2
请至少发布一行显示此错误的代码。 - aroth
你是否已经正确地检查了出现错误的行中变量的数据类型? - Ranhiru Jude Cooray
我添加了一行有错误的代码。它不可能错! - Snote
1
请提供自定义事件的构造函数和头文件代码? - Sam DeHaan
我在FB 4.6中遇到了同样的问题。更改文件后,会出现错误。再次更改它(添加空格等),然后重新保存,现在它可以工作了。反复洗涤,重复这个过程。每隔一次编译就会出现错误。非常烦人。 - Scott A
6个回答

11

我也在使用 Flash Builder 4.5 时遇到了这个问题。返回类型完全正确。

对我来说,解决方法是通过以下方式对项目进行完全重建:Project -> Clean。


6
我最近在使用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; }

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

迄今为止,这种技术似乎是可靠的,但很烦人。


11
我也遇到了这个问题,但我的解决方法更简单,只需要到项目-> 清理。这似乎可以解决问题。 - Jonathan Rowny
+1 是因为这可能是“正确的方法”,但实际上对于一个大型项目来说,进行一次干净的重建需要更长时间。单独修改一个文件的优点在于重建通常是经过优化的,并且修复看起来同样有效。 - Eric deRiel
对我来说,清理并没有帮助,但重启FlashBuilder解决了问题。 - membersound

4

我曾经遇到了同样的问题。我通过禁用"严格类型检查"来解决它。

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


2
被接受的答案对我没有用,但这个有用。虽然不是理想的解决方案,但至少我可以继续我的工作。 - Franz See
我不明白的是,我的项目在成功构建了几天后突然出现了这些错误。为了能够继续,我还不得不禁用严格类型检查。 - Scott

1

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


我编辑了我的消息并添加了一些代码。如果您尝试将字符串值('4')分配给期望int(4)的对象,则错误将是“将类型为String的值隐式强制转换为不相关的类型int”,但我收到的消息是“将类型为String的值隐式强制转换为不相关的类型String”。 - Snote
@Snote 这两个可能是不同的 String 类。它们来自相同的命名空间吗? - Jason Towne

0
在我的情况下,一切都进行得很顺利。因此,看起来是一个IDE问题,因为相同的代码有时候可以工作,而另一次会显示这个错误。您可以尝试几个步骤来解决这个问题:
1.清除已编译的代码并重新编译。(在项目选项卡中有一个清除选项)。
2.创建一个带有相同代码的文件并删除旧文件。
3.如果所有这些都不起作用,请创建另一个继承基类的类,并将预期值更改为 *

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

0

这是一种隐式转换,但根据您提供的信息,我无法告诉您具体的问题。

var loadApplicationEvent:LoadApplicationEvent = new LoadApplicationEvent(application);

“application”是什么类型的对象,LoadApplicationEvent构造函数期望的参数是什么?这就是你隐式强制转换出现的地方。我猜测“application”与LoadApplicationEvent的构造函数所期望的类型不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接