Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在flex中获取类型_Apache Flex_Flash_Actionscript 3_Reflection - Fatal编程技术网

Apache flex 在flex中获取类型

Apache flex 在flex中获取类型,apache-flex,flash,actionscript-3,reflection,Apache Flex,Flash,Actionscript 3,Reflection,有人能告诉我如何在flex中识别对象的类型吗?特别是我有一个数组,我现在在其中存储多个类型(但所有UIComponents),当我评估数组时,我想知道我是有一个TextInput控件还是一个RadioButton。有人有主意吗 提前感谢您可以使用“is”操作符对特定类进行测试,也可以使用flash.utils.getQualifiedClassName()(您将其传递给您的对象)-这将返回一个完全限定类名字符串。is操作符测试类型兼容性,是的。从文档中,是: 。。。计算对象是否为空 与特定数据类

有人能告诉我如何在flex中识别对象的类型吗?特别是我有一个数组,我现在在其中存储多个类型(但所有UIComponents),当我评估数组时,我想知道我是有一个TextInput控件还是一个RadioButton。有人有主意吗


提前感谢

您可以使用“is”操作符对特定类进行测试,也可以使用flash.utils.getQualifiedClassName()(您将其传递给您的对象)-这将返回一个完全限定类名字符串。

is操作符测试类型兼容性,是的。从文档中,

。。。计算对象是否为空 与特定数据类型兼容, 类或接口。使用
is
运算符,而不是instanceof 用于类型比较的运算符。你可以 还可以使用
is
操作符进行检查 对象是否实现 接口

该类别中的其他有用运算符有
typeof
(返回原语的字符串表示形式)、
instanceof
(类似于
is
,但忽略接口兼容性)和
as
。ActionScript操作符的完整列表

希望有帮助

运算符“is”表示一个选项

然后是操作符,它可能有用,也可能不有用,这取决于具体情况

还有带有静态方法的ObjectUtil类。这个函数返回的不仅仅是对象的类名

不幸的是,运算符“typeof”对于类是无用的


而且,正如Branden Hall已经建议的那样,.

这里有一些简单的伪代码,演示了如何使用
is
操作符来完成您想要做的事情:

for each (var item:* in myArray)
{
    if (item is TextInput)
        doSomethingWithTextInput(item as TextInput);
    else if (item is RadioButton)
        doSomethingWithRadioButton(item as RadioButton);
}

您的最佳选择是使用“is”操作符,并使用以下内容:

for( var i:int = 0; i < componentArr.length; i++ )
{
    var comp:UIComponent = componentArr[ i ];
    if( comp is DataGrid )
        // Handle DataGrid functionality here.
    else if (comp is DropDown )
        // Handle DropDown here
}
对于希望对象成为特定类(而不是子类)成员的情况,还有另一个选项:可以使用对象的构造函数属性和switch语句

for( var i:int = 0; i < componentArr.length; i++ )
{
    var klass:Class = componentArr[ i ].constructor;

    switch( klass )
    {
        case DataGrid:
            // Handle DataGrid
            break;
        case Text:
            // Handle Text
            break;
        case NumericStepper:
             // Handle NumericStepper
            break;
        default:
             // Handle default
            break;

    }
}
for(变量i:int=0;i
尝试使用“className”属性

根据具体情况,它应该返回“TextInput”或“Button”

for each (var item:* in myArray)
{
    if(item.hasProperty('className'))
    {
        trace("item ["+i+"] is :" + item['className']);
    }
}
其工作原理:)

下面是我解决这个问题的方法

switch( true )
   {
    case item is Customer_SF:
     c = item as Customer_SF;
     break;

    case item is Opportunity:
     o = item as Opportunity; 
     break;

    case item is Product:
     o = ( item as Product )._opportunity;
     break;
    default:
     return true;
   }

只是使用了“is”:var b:Boolean=arr[i]is TextInput,这是唯一也是最好的方法吗?ObjectUtil.getClassInfo(啊,是的--getQualifiedClassName()。它多次派上用场。你可以使用Object而不是*除非你希望数组中有名称空间和其他疯狂的项。好的,我只是想让它尽可能灵活。事实上,如果你知道你只需要UIComponents或DisplayObjects,那么你可以使用它。
switch( true )
   {
    case item is Customer_SF:
     c = item as Customer_SF;
     break;

    case item is Opportunity:
     o = item as Opportunity; 
     break;

    case item is Product:
     o = ( item as Product )._opportunity;
     break;
    default:
     return true;
   }