java - 我应该使用@SuppressWarnings - 类型安全: Unchecked cast from Object[] to T[]

标签 java warnings

尝试创建一个可增长的数组,即容量可以像数组列表一样增加的数组。我在下面的代码中收到警告。我应该修复它还是抑制它?压制它会产生什么后果?

import java.util.*;

public class GrowableArray<T>{
  private T[] array;
  //more variables

GrowableArray{
  this.array = (T[]) new Object[10]; // Warning - Type safety: Unchecked cast 
                                     //from Object[] to T[]
  //more code

 }     

//more code

完整代码请看下面 -

import java.util.*;  

public class GrowableArray<T>{  

    private T[] array;  
    private int increaseSizeBy;  
    private int currentIndex;//That is first free position available  
    private int lastIndex;  

    public GrowableArray(){       
        this.array = (T[]) new Object[10];  
        this.currentIndex = 0;  
        this.lastIndex = 10-1;  
        this.increaseSizeBy = 10;  
    }  


    public GrowableArray(int initialSize){  
        this.array = (T[]) new Object[initialSize];  
        currentIndex = 0;  
        lastIndex = initialSize - 1;  

    }  

    public void increaseSizeBy(int size){  
        this.increaseSizeBy = size;  

    }  


    public void add(T anObject){  

        if(currentIndex > lastIndex){ ;  
            //create a bigger array  
            int oldLength = array.length;  
            int newLength = oldLength + this.increaseSizeBy;  
            Object [] biggerArray = Arrays.copyOf(array, newLength);  
            array = (T[]) biggerArray;  
            currentIndex = oldLength;  
            lastIndex = array.length-1;  

        }else{  
            array[currentIndex] = anObject;  
            currentIndex++;  

        }  

    }  


    public void display(){  

        System.out.println();  

        for(int i = 0; i < this.currentIndex; i++){  
            System.out.print(array[i] + ", ");  

        }  

        System.out.println();  

    }  


    public static void main(String[]args){  

        GrowableArray<Integer> gArr = new GrowableArray<Integer>();  

        for(int i = 0; i <= 35; i++){  
            gArr.add(i);  

        }  

        gArr.display();  

        gArr.add(300);  
        gArr.add(301);  
        gArr.add(302);  
        gArr.add(303);  
        gArr.add(304);  
        gArr.add(305);  


        gArr.display();  

    }  


}  

最佳答案

在 Java 7 中,您可以使用可变参数。完全没有抑制:

public class GrowableArray<T> {
  // Default empty to size 10.
  private static final int DefaultLength = 10;
  // My current array.
  private T[] array;

  // Empty constructor.
  GrowableArray () {
    // Passing no 2nd param at all forces jvm to manufacture an empty one for me - which is an array<T>.
    array = makeNew(DefaultLength);
  }

  // Make a new one of the right size.
  private T[] makeNew(int length, T... sample) {
    return Arrays.copyOf(sample, length);
  }
}

关于java - 我应该使用@SuppressWarnings - 类型安全: Unchecked cast from Object[] to T[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994290/

相关文章:

c++ - 为什么 MSVC++ 认为 "std::strcat"是 "unsafe"? (C++)

c - 2 个警告 : 'int *' differs in levels of indirection from 'int **' and different types for formal and actual parameter 3

c++ - 创建自定义#warning 标志

ios - 删除警告

java - 从 Servlet 中的 JSP 检索具有相同名称的多个文本框值

java - 如何通过java发送自定义参数?

java - 检测 JTree 行上的双击

java - 如何向 GridView 添加标题?

python - 在 Django App 的控制台输出中显示警告

java - 完成网站加载时的闪屏