就其本身而言,这是不可能的。这与 ActionScript 无关。在大多数其他语言中,您也有同样的问题,因为在左侧您有一个匿名对象,如果该语言支持任何此类事物,或者是哈希。
反正。有不同的解决方案,这将是一个,可以处理一些事情:
package {
public class ObjectUtils {
public static function createInstance(constructor:Class):* {
var ret:*;
switch (describeType(to).factory.constructor.parameter.(@optional == "false").length()) {
case 0: ret = new to(); break;
case 1: ret = new to(null); break;
case 2: ret = new to(null, null); break;
case 3: ret = new to(null, null, null); break;
case 4: ret = new to(null, null, null, null); break;
case 5: ret = new to(null, null, null, null, null); break;
case 6: ret = new to(null, null, null, null, null, null); break;
case 7: ret = new to(null, null, null, null, null, null, null); break;
case 8: ret = new to(null, null, null, null, null, null, null, null); break;
case 9: ret = new to(null, null, null, null, null, null, null, null, null); break;
default: throw new Error("no implementation for instantiating classes that require more than 9 constructor arguments");
}
return ret;
}
public static function castAnonymous(obj:Object, to:Class):* {
var ret = createInstance(obj);
for (var name:String in obj)
try {
ret[name] = obj[name];
}
catch (e:Error) {
throw new Error("error trying to assign value " + obj[name] + " to property " + name + " on " + ret + ". reason: " + e);
}
return ret;
}
}
}
限制:
- 如果您的类出现恐慌、在构造时使用空值向其发送垃圾邮件或构造函数需要 9 个以上的参数,则会失败
- 没有,也不能递归,所以它可以简单地将匿名对象或数组分配给返回的实例的属性
无论如何希望它有所帮助;)
问候
back2dos