还在为类型强转烦愁吗?
看看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
分享到:
相关推荐
通过使用泛型,可以创建参数化的类型,这意味着在类、接口或方法中可以使用类型参数来指定具体的类型。这有助于避免重复代码,并提供了更好的性能。 在给定的代码片段中,主要展示了如何定义一个泛型类以及如何在类...
强转 直接举例说明: A 表id是int 类型 B表id是 char 类型 如果要转为int 则是signed 如果要转为char 则是char 注意:需转换的类型必须是left join 后表的字段,否则不走索引 因为联表字段类型不一致,所以不走索引...
3. 在已知引用类型之间转换,确保有适当的转换函数,然后使用类型强转。 4. 值类型之间转换,优先考虑使用 `System.Convert` 类提供的静态方法。 **(int) 转换、Int32.Parse() 和 Convert.ToInt32()** 1. `(int)` ...
- **强转(类型名称.asFunction())**:当你确定一个对象是某种类型,但编译器无法确定时,可以使用此方法。例如,将`int`转换为`String`:`int num = 123; String str = num.toString();` - **is 检查**:在转换前...
在TypeScript中,类型系统是其一大特色,它允许开发者在编写代码时声明变量、函数参数和返回值的类型,从而提高代码的可读性和稳定性。然而,在某些情况下,我们可能需要将一个值从一种类型转换为另一种类型,这就是...
所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下: foreach((array)$arr as $key => $value); 这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能...
JavaScript 是一种动态类型的语言,这意味着变量的类型可以在运行时改变。然而,在某些情况下,我们可能需要强制将一个值转换为特定的数据类型。JavaScript 提供了三个内置的全局函数来进行这样的强制类型转换:`...
要实现findViewById和后面的click函数得将btn设置成全局变量,同时因为是要实现按钮的点击,还需要一个强转类型具体代码如下: public class MainActivity extends AppCompatActivity { Button btn
26. **类型转换**:了解强转和隐式转换的区别,以及何时使用`Convert`类或`as`关键字。 27. **委托与事件的组合**:学习如何将多个事件处理函数组合在一起,以实现复杂的功能。 28. **单元测试**:理解单元测试的...
相信学过 C# 的朋友都会知道 is 是干嘛的,而且还经常和 as 一起比较,前者一般做兼容性检测,后者一般做兼容性转换,这里我就举个例子吧: static void Main(string[] args) { object slot = new Slot() { ...
- 当`(A) s`强转后调用`printValue()`时,由于`s`实际上是一个`S`类型的对象,因此仍然输出"S"。 - 当`as`被赋值为一个新的`A`类型的对象后调用`printValue()`时,输出"A"。 - **答案:**SSA **2. String compare...
本文实例讲述了javascript实现的字符串转换成数组操作。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">... //2、将数组转成字符串形式:jo
今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1)) 我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四舍五入函数,数据也没有四舍五入,而...
4. **类型转换与强转**:频繁使用`as`关键字进行类型转换可能导致代码冗余且不易阅读。可以考虑使用泛型或在适当的地方进行类型检查,以简化代码。 5. **构造函数与默认值**:构造函数不应该包含过多参数,可以使用...
如果我们直接强转data值,可能会报类型错误。解决方法是使用ObjectMapper将数据转换到相应的容器中,例如: ```java public static <T> T convertValue(Object bean, Class<T> clazz){ try{ ObjectMapper mapper =...
为了不必要的麻烦,就是判断过期时间一定不能在一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为背景。 说了这么多,终于说...