[英]I want to understand why this warning is coming along when i try to compile and run the following program,
我在這里包含了源代碼,任何人都可以幫助我理解它。
Program 1: TEST CLIENT
public class bl_stack_gtestClient{
public static void main(String[] args) {
bl_stack_array <String> s = new bl_stack_array <String> (20);
int i =0;
while (!StdIn.isEmpty()) {
String item = StdIn.readString();
if (!item.equals("-"))
s.push(item);
else if (!s.isEmpty()){
StdOut.print(s.pop() + " ");
}
}
StdOut.println("(" + s.size() + " left on stack)");
}
}
這個程序是我使用數組2的堆棧實現:
public class bl_stack_array <E> {
private Object[] stack;
private int ptr=0;
public bl_stack_array(int capacity){
stack = (E[]) new Object[capacity];
}
public void push(E item){
stack[ptr++] = item;
}
public E pop(){
E temp = (E)stack[--ptr];
stack[ptr] = null;
return temp;
}
public boolean isEmpty(){
return ptr == 0;
}
public int size(){
return ptr;
}
public void print(){
for (int i =0; i < ptr ; i++ ) {
System.out.println(" "+stack[i]);
}
}
}
要在Terminal中進行編譯,
javac -Xlint -cp ".:stdlib.jar" bl_stack_array.java
javac -Xlint -cp ".:stdlib.jar" bl_stack_gtestClient.java
跑步
javac -cp ".:stdlib.jar" bl_stack_gtestClient
我得到的警告是這樣,
bl_stack_array.java:5: warning: [unchecked] unchecked cast
stack = (E[]) new Object[capacity];
^
required: E[]
found: Object[]
where E is a type-variable:
E extends Object declared in class bl_stack_array
bl_stack_array.java:11: warning: [unchecked] unchecked cast
E temp = (E)stack[--ptr];
^
required: E
found: Object
where E is a type-variable:
E extends Object declared in class bl_stack_array
2警告
請幫助我理解警告,我無法真正理解為什么會出現警告,但是我仍然進行了強制轉換,但是程序運行正常,
有什么辦法可以擺脫這種警告,...或者使用泛型array [],E [],而不僅僅是原始的
在我看來,發出警告的演員陣容毫無用處。 您正在實例化Object[]
並將其分配給聲明為Object[]
的變量,那么為什么要強制轉換它? 您應該執行的唯一強制轉換是pop
方法中的pop
。 我認為這種情況下的警告意味着編譯器無法確保您所做的合法,但是該程序仍然可以正常工作,因為您實際上是將Object[]
強制轉換為Object[]
。 據我所知,泛型不能與原始類型(即數組)一起使用,它僅在Object
(即成熟的類,並且在Java中都對java.lang.Object
進行擴展)中有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.