gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:06:49 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com