簡體   English   中英

我想了解為什么在嘗試編譯並運行以下程序時會出現此警告,

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM