Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/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/5/actionscript-3/7.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/8/mysql/58.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 是否可以在Actionsctipt 3中定义泛型类型向量?_Apache Flex_Actionscript 3_Vector_Generics - Fatal编程技术网

Apache flex 是否可以在Actionsctipt 3中定义泛型类型向量?

Apache flex 是否可以在Actionsctipt 3中定义泛型类型向量?,apache-flex,actionscript-3,vector,generics,Apache Flex,Actionscript 3,Vector,Generics,嗨,我需要做一个向量计算器,所以我需要接受任何类型的向量。我目前正在尝试将类型定义为*类似于: var collection:Vector.<*> = new Vector<*>() var集合:向量新向量() 但是编译器抱怨类型“不是编译时常量”。我知道Vector类中存在一个错误,错误报告将错误类型报告为缺失,例如: var collection:Vector.<Sprite> = new Vector.<Sprite>() var集合:

嗨,我需要做一个向量计算器,所以我需要接受任何类型的向量。我目前正在尝试将类型定义为*类似于:

var collection:Vector.<*> = new Vector<*>()
var集合:向量新向量()
但是编译器抱怨类型“不是编译时常量”。我知道Vector类中存在一个错误,错误报告将错误类型报告为缺失,例如:

var collection:Vector.<Sprite> = new Vector.<Sprite>()
var集合:向量新向量。()
如果未导入Sprite,编译器会抱怨找不到Vector类。我想知道这是否相关?

var collection:Vector.=新向量。()
var collection:Vector.<Object> = new Vector.<Object>()
也许吧? 但我只是猜测,还没有尝试过。

var-collection:Vector.=新向量。()
var collection:Vector.<Object> = new Vector.<Object>()

但仅针对FlashPlayer10CS4,所以答案似乎是无法将类型的向量隐式转换为有效的超级类型。它必须使用全局向量显式执行。功能

所以我的实际问题是一系列问题:)

使用向量是正确的。作为对另一个向量的一般引用,但不能这样执行:

var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = spriteList // this will cause a type casting error
var spriteList:Vector.=新向量。()
var genericList:Vector.=新向量。()
genericList=SpritList//这将导致类型转换错误
应使用全局向量()函数/cast执行赋值,如下所示:

var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = Vector.<Object>(spriteList)
var spriteList:Vector.=新向量。()
var genericList:Vector.=新向量。()
genericList=向量(spriteList)
这是一个我不看报纸的简单例子

下面是一些测试代码,我希望是矢量。隐式转换为向量

public类VectorTest扩展了Sprite
{
公共功能向量测试()
{
//由于与VectorContainer中的集合类型完全相同,因此可以正常工作
变量集合:向量。=新向量。()
//编译器抱怨将数据隐式转换为
变量集合:向量。=新向量。()
集合。推送(“一”)
集合。推送(“两个”)
集合。推送(“三”)
for each(var eachNumber:集合中的字符串)
{
跟踪(“每个编号:+每个编号)
}
var vectorContainer:vectorContainer=新的vectorContainer(集合)
while(vectorContainer.hasNext())
{
跟踪(vectorContainer.next)
}
}
}
公共类向量容器
{
私有变量集合:Vector。
私有var_指数:int=0
公共函数VectorContainer(集合:Vector.)
{
_集合=集合
}
公共函数hasNext():Boolean
{
返回_索引<_collection.length
}
公共函数get next():*
{
返回_集合[_index++]
}
}

我相信你可以通过称它为
向量(no

[Bindable]来引用非类型向量
公共变量selectedItems:Vector。;
公共功能选择更改(项目:矢量):无效
{
选择编辑项=向量(项);
}

使用ApacheFlex4.11.0,您已经可以随心所欲了。它可能从4.9.0开始就存在,但我以前从未尝试过。

这是一个很好的问题。未知领域!这会导致类型转换错误。如果我创建一个向量。并将其传递给我的迭代器,编译器会抱怨如何强制转换向量。对于一个向量。只是一种预感-尝试将该方法声明为接受一个向量(没有类型参数),根据编译器,该向量的语法是非法的。它至少需要向量。()这会导致类型转换错误。如果我创建一个向量。并将其传递给我的迭代器,编译器会抱怨如何强制转换向量。这是迭代器构造函数VectorIterator(集合:Vector.),下面是创建的外观:var spriteList:Vector.=新向量。()var iterator:vectoritator=newvectoritator(Vector.(spriteList))相当难看:)这是否意味着无法保留键入内容?也就是说,有一个矢量器。或者矢量器……是的,据我所知。泛型不是ECMA语言规范的一部分,所以我无法用泛型类型定义类。我可以使用Vector类,但据我所知,这更像是一种编译器级的黑客行为。@Brian-AVM本机支持Vector。我没有研究它们是如何定义的,但它们的引用方式绝对是独一无二的。请看我的自我回答问题-谢谢Richard,看看向量是如何实现的很有趣,希望泛型很快就会成为语言的一部分,再加上as3mock的一个合适的代理系统,使模拟对您来说变得非常容易:根据编译器,这是非法语法。它至少需要向量。()
public class VectorTest extends Sprite
{
    public function VectorTest()
    {
        // works, due to <*> being strictly the same type as the collection in VectorContainer
        var collection:Vector.<*> = new Vector.<String>() 

        // compiler complains about implicit conversion of <String> to <*>
        var collection:Vector.<String> = new Vector.<String>()
        collection.push("One")
        collection.push("Two")
        collection.push("Three")

        for each (var eachNumber:String in collection)
        {
            trace("eachNumber: " + eachNumber)
        }

        var vectorContainer:VectorContainer = new VectorContainer(collection)

        while(vectorContainer.hasNext())
        {
            trace(vectorContainer.next) 
        }
    }
}

public class VectorContainer
{
    private var _collection:Vector.<*>

    private var _index:int = 0

    public function VectorContainer(collection:Vector.<*>)
    {
        _collection = collection
    }

    public function hasNext():Boolean
    {
        return _index < _collection.length
    }

    public function get next():*
    {
        return _collection[_index++]
    }
}
[Bindable]
public var selectedItems:Vector.<Category>;

public function selectionChange(items:Vector.<Object>):void
{
    selectedItems = Vector.<Category>(items);
}