在Java中使用“DynaArray <int>”时出现语法错误</int>

时间:2012-05-10 18:21:09

标签: java generics

我正在尝试编写自己的C ++ STL向量版本&lt;&gt;我希望它能够生成一个动态增长和缩小的列表...我想拥有push_back,push_front,pop_back,pop_front,remove,removeAt,clear和size的方法......我写的所有这些都没有什么问题我得到了没有构建错误或警告,当我尝试实例化类时,Eclipse告诉我它在标记之后寻找Dimensions ...所以它认为我发送的任何类型都想成为该类型的数组,例如...

    DynaArray<int> Bob;

这里需要在int。之后的[]运算符。

这是我班级目​​前的样子

    public class DynaArray<T>
{       
    int Size = 0;
    int CurrentCount = 0;
    int LastSpot = 0;
    T[] Array;

    DynaArray(int _size)
    {
        Size = _size;
    }

    @SuppressWarnings("unchecked")
    void push_back(T _element)
    {
        CurrentCount++;
        if(CurrentCount > Size)
        {
            //make a new array for double the size;
            if( Size == 0 )
            {
                Size = 2;
                Array = (T[]) new Object[Size];
            }
            else
            {
                int OldSize = Size;
                Size = Size*2;
                T[] TempArray;
                TempArray = (T[]) new Object[Size];
                int i = 0;
                for( ; i < OldSize; i++ )
                {
                    //Copy over info from Array to TempArray
                    TempArray[i] = Array[i];
                }
                Array = TempArray;
            }
        }

        //Now add the new element onto the array
        Array[LastSpot] = _element;
        LastSpot++;     

    }

    @SuppressWarnings("unchecked")
    void push_front(T _element)
    {
        CurrentCount++;
        if( Size == 0)
        {
            Size = 2;
            Array = (T[]) new Object[Size];
            Array[0] = _element;
            return;
        }
        else
        {
            int OldSize = Size;
            Size = Size+1;
            T[] TempArray;
            TempArray = (T[]) new Object[Size];
            int i = 1;
            for( ; i < OldSize; i++ )
            {
                //Copy over info from Array to TempArray
                TempArray[i] = Array[i-1];              
                Array = TempArray;
                Array[0] = _element;
            }           
    }

    }

    T pop_back()
    {
        if( CurrentCount <= 0)
            return null;
        else
        {
            return Array[CurrentCount-1];
        }

    }

    T pop_front()
    {
        if( CurrentCount <= 0)
            return null;
        else
        {
            return Array[0];
        }
    }

    int size()
    {
        return CurrentCount;
    }

    @SuppressWarnings("unchecked")
    void clear()
    {
        Size = 0;
        CurrentCount = 0;
        LastSpot = 0;
        Array = (T[]) new Object[2];

    }

    @SuppressWarnings("unchecked")
    void removeAt(int index)
    {
        T[] TempArray = (T[]) new Object[Size];
        int ArrayIndex = 0;
        for( int i = 0; i < CurrentCount; i++)
        {
            if( i == index )
                continue;

            TempArray[ArrayIndex] = Array[i];
            ArrayIndex++;

        }
    }

    void remove(T _element)
    {
        for(int i = 0; i < CurrentCount; i++)
        {
            //look for the element
            if( Array[i] == _element)
                removeAt(i);
        }
    }


}

感谢您提供的任何帮助,或者如果我的代码以某种方式帮助您,欢迎

2 个答案:

答案 0 :(得分:2)

int是一个基元,因此cannot be used with Java generics。原因是maintain the bytecode's backwards compatibility(这在首次引入仿制药时很重要)。您必须使用Integer代替。

N.B。除非您将此作为学术练习,否则您可以/应该使用List<T>代替自定义实施的课程。

或者:使用Trove.

答案 1 :(得分:0)

您不能将Java基元用作通用类型,因为它们是not instances of Objectint[]工作的原因是因为Java数组是一个对象。请使用带框的Integer代替。