package net.liugeng.gencls;
import java.util.Arrays;
public class GenericDynamicArray <T>
{
private T[] arr ;
public static final int INITCAPACITY = 10;
private int count;
public GenericDynamicArray()
{
arr = (T[])new Object[INITCAPACITY];
count = 0;
}
/**
* 取得数组中下标为i的元素的值
* @param i 给定的下标
* @return 数组中下标i所对应的值
*/
public T get(int i)
{
if(i < 0 || i > count)
{
System.out.println("下标不合理");
}
return arr[i];
}
/**
* 取得数组中已经存储的元素的个数
* @return
*/
public int size()
{
return count;
}
/**
* 添加一个新元素
* @param num
*/
public void add(T num)
{
if(arr.length == count)
{
arr = increaseCapacity(arr);
}
arr[count] = num;
count ++;
}
/**
* 移除下标为i的元素
* @param i
*/
public void remove(int i)
{
if(i < 0 || i > count)
{
return ;
}
for(int j = i + 1; j < count; j ++)
{
arr[j-1]= arr[j];
}
count --;
}
/**
* 给数组增容
* @param myArr
* @return
*/
private T[] increaseCapacity(T[] myArr)
{
T[] newArr = (T[])new Object[myArr.length * 2];
for(int i = 0; i < myArr.length; i ++)
{
newArr[i] = myArr[i];
}
return newArr;
}
public void display()
{
for(int i = 0; i < count; i ++)
{
System.out.print(arr[i] + ", ");
}
}
public T[] getArray()
{
return Arrays. <T>copyOf( arr, count );
}
public void displayAll()
{
for(int i = 0; i < arr.length; i ++)
{
System.out.print(arr[i] + ", ");
}
}
}
// 测试
public class Main
{
public static void main(String[] args)
{
GenericDynamicArray <Integer> gda = new GenericDynamicArray <Integer>();
gda.add( new Integer( 1 ) );
gda.add( new Integer( 2 ) );
gda.add( new Integer( 3 ) );
Integer[] arr = gda.getArray(); // 第51行,为什么呢?
for( Integer val : arr )
{
System.out.println( val );
}
}
}
// 出错
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
at net.liugeng.gencls.Main.main(Main.java:51)
创建自定义泛型类型和方法
最新推荐文章于 2022-04-02 17:44:14 发布