`
prec
  • 浏览: 65385 次
  • 性别: Icon_minigender_1
  • 来自: 互联网
最近访客 更多访客>>
社区版块
存档分类
最新评论

AS3 类型强转类

阅读更多

还在为类型强转烦愁吗?

看看darron schall 给我们带来的这个强制转换类:

 http://www.darronschall.com/weblog/archives/000247.cfm

用法:ObjectTranslator.objectToInstance(Object对象,要强转成的类型) as 要强转成的类型

嘿嘿,这回不用担心Object转VO转不成了。

源码:

package com.goufang.util
...{

import flash.net.ObjectEncoding;
import flash.net.registerClassAlias;
import flash.utils.ByteArray;
import flash.utils.describeType;
import flash.utils.getDefinitionByName;

/** *//**
 * Utility class to convert vanilla objects to class instances.
 
*/

public final class ObjectTranslator
...{
    
    
/** *//**
     * Converts a plain vanilla object to be an instance of the class
     * passed as the second variable.  This is not a recursive funtion
     * and will only work for the first level of nesting.  When you have
     * deeply nested objects, you first need to convert the nested
     * objects to class instances, and then convert the top level object.
     * 
     * TODO: This method can be improved by making it recursive.  This would be 
     * done by looking at the typeInfo returned from describeType and determining
     * which properties represent custom classes.  Those classes would then
     * be registerClassAlias'd using getDefinititonByName to get a reference,
     * and then objectToInstance would be called on those properties to complete
     * the recursive algorithm.
     * 
     * 
@param object The plain object that should be converted
     * 
@param clazz The type to convert the object to
     
*/

    
public static function objectToInstance( object:Object, clazz:Class ):*
    
...{
        var bytes:ByteArray 
= new ByteArray();
        bytes.objectEncoding 
= ObjectEncoding.AMF0;
        
        
// Find the objects and byetArray.writeObject them, adding in the
        
// class configuration variable name -- essentially, we're constructing
        
// and AMF packet here that contains the class information so that
        
// we can simplly byteArray.readObject the sucker for the translation
        
        
// Write out the bytes of the original object
        var objBytes:ByteArray = new ByteArray();
        objBytes.objectEncoding 
= ObjectEncoding.AMF0;
        objBytes.writeObject( object );
                
        
// Register all of the classes so they can be decoded via AMF
        var typeInfo:XML = describeType( clazz );
        var fullyQualifiedName:String 
= typeInfo.@name.toString().replace( /::/"." );
        registerClassAlias( fullyQualifiedName, clazz );
        
        
// Write the new object information starting with the class information
        var len:int = fullyQualifiedName.length;
        bytes.writeByte( 
0x10 );  // 0x10 is AMF0 for "typed object (class instance)"
        bytes.writeUTF( fullyQualifiedName );
        
// After the class name is set up, write the rest of the object
        bytes.writeBytes( objBytes, 1 );
        
        
// Read in the object with the class property added and return that
        bytes.position = 0;
        
        
// This generates some ReferenceErrors of the object being passed in
        
// has properties that aren't in the class instance, and generates TypeErrors
        
// when property values cannot be converted to correct values (such as false
        
// being the value, when it needs to be a Date instead).  However, these
        
// errors are not thrown at runtime (and only appear in trace ouput when
        
// debugging), so a try/catch block isn't necessary.  I'm not sure if this
        
// classifies as a bug or not... but I wanted to explain why if you debug
        
// you might seem some TypeError or ReferenceError items appear.
        var result:* = bytes.readObject();
        
return result;
    }

    
}
 // end class
}
 // end package

 

 

分享到:
评论

相关推荐

    C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换

    通过使用泛型,可以创建参数化的类型,这意味着在类、接口或方法中可以使用类型参数来指定具体的类型。这有助于避免重复代码,并提供了更好的性能。 在给定的代码片段中,主要展示了如何定义一个泛型类以及如何在类...

    MYSQL字符串强转的方法示例

    强转 直接举例说明: A 表id是int 类型 B表id是 char 类型 如果要转为int 则是signed 如果要转为char 则是char 注意:需转换的类型必须是left join 后表的字段,否则不走索引 因为联表字段类型不一致,所以不走索引...

    C#中is与as的区别分析

    3. 在已知引用类型之间转换,确保有适当的转换函数,然后使用类型强转。 4. 值类型之间转换,优先考虑使用 `System.Convert` 类提供的静态方法。 **(int) 转换、Int32.Parse() 和 Convert.ToInt32()** 1. `(int)` ...

    Dart运算符 条件表达式 Dart类型转换.zip

    - **强转(类型名称.asFunction())**:当你确定一个对象是某种类型,但编译器无法确定时,可以使用此方法。例如,将`int`转换为`String`:`int num = 123; String str = num.toString();` - **is 检查**:在转换前...

    TypeScript学习之强制类型的转换

    在TypeScript中,类型系统是其一大特色,它允许开发者在编写代码时声明变量、函数参数和返回值的类型,从而提高代码的可读性和稳定性。然而,在某些情况下,我们可能需要将一个值从一种类型转换为另一种类型,这就是...

    php foreach 参数强制类型转换的问题

    所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下: foreach((array)$arr as $key => $value); 这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能...

    Javascript 强制类型转换函数

    JavaScript 是一种动态类型的语言,这意味着变量的类型可以在运行时改变。然而,在某些情况下,我们可能需要强制将一个值转换为特定的数据类型。JavaScript 提供了三个内置的全局函数来进行这样的强制类型转换:`...

    浅学AS,设置Button点击事件的三种方式

    要实现findViewById和后面的click函数得将btn设置成全局变量,同时因为是要实现按钮的点击,还需要一个强转类型具体代码如下: public class MainActivity extends AppCompatActivity { Button btn

    ABC.zip_ABC

    26. **类型转换**:了解强转和隐式转换的区别,以及何时使用`Convert`类或`as`关键字。 27. **委托与事件的组合**:学习如何将多个事件处理函数组合在一起,以实现复杂的功能。 28. **单元测试**:理解单元测试的...

    C# 中的 is 真的是越来越强大越来越语义化(推荐)

    相信学过 C# 的朋友都会知道 is 是干嘛的,而且还经常和 as 一起比较,前者一般做兼容性检测,后者一般做兼容性转换,这里我就举个例子吧: static void Main(string[] args) { object slot = new Slot() { ...

    09淘宝校园招聘笔试题

    - 当`(A) s`强转后调用`printValue()`时,由于`s`实际上是一个`S`类型的对象,因此仍然输出"S"。 - 当`as`被赋值为一个新的`A`类型的对象后调用`printValue()`时,输出"A"。 - **答案:**SSA **2. String compare...

    javascript实现的字符串转换成数组操作示例

    本文实例讲述了javascript实现的字符串转换成数组操作。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">... //2、将数组转成字符串形式:jo

    sqlserver四舍五入使用round函数及cast和convert函数

     今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1)) 我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四舍五入函数,数据也没有四舍五入,而...

    代码能不能不要写得这么烂?!

    4. **类型转换与强转**:频繁使用`as`关键字进行类型转换可能导致代码冗余且不易阅读。可以考虑使用泛型或在适当的地方进行类型检查,以简化代码。 5. **构造函数与默认值**:构造函数不应该包含过多参数,可以使用...

    详解spring cloud feign踩坑记录

    如果我们直接强转data值,可能会报类型错误。解决方法是使用ObjectMapper将数据转换到相应的容器中,例如: ```java public static <T> T convertValue(Object bean, Class<T> clazz){ try{ ObjectMapper mapper =...

    Javascript中使用parseInt函数需要注意的问题

    为了不必要的麻烦,就是判断过期时间一定不能在一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为背景。  说了这么多,终于说...

Global site tag (gtag.js) - Google Analytics