簡體   English   中英

警告:[使用通用數組時未選中]未選中的強制類型轉換

[英]warning: [unchecked] unchecked cast while using Generic Array

我正在創建自己的固定課程。 但是,一開始,我會發出警告。 我在此鏈接中使用如何創建通用數組? 但是我已經警告過了。

這是我的警告消息:

MySet.java:11: warning: [unchecked] unchecked cast
        data = (T[]) new Object[10];
                     ^
  required: T[]
  found:    Object[]
  where T is a type-variable:
    T extends Object declared in class MySet
1 warning

這是我的初學者代碼:

Main.java

public class Main{

    public static void main(String[] args){

        MySet<Integer> a = new MySet<Integer>();

        System.out.printf("empty or not = %d\n",a.empty());

    }

}

MySetInterface.java

public interface MySetInterface<T> {
    public int empty();
}

MySet.java

public class MySet<T> implements MySetInterface<T>{

private T[] data;
private int used;
private int capacity;

public MySet(){

    used = 0;
    capacity = 1024;
    data = (T[]) new Object[10];
}

public int empty(){

    if(used == 0){
        return 1;
    }
    else{
        return 0;
    }

}

如果我用

@SuppressWarnings("unchecked")
        data = (T[]) new Object[10];

我現在收到此錯誤消息:

MySet.java:12: error: <identifier> expected
        data = (T[]) new Object[10];
            ^
1 error

如果您閱讀了所提供問題的答案,則將對為何顯示警告給出非常詳盡的解釋,並且還提供了有效的解決方法。

上面的代碼具有與上述相同的含義。 如果您注意到了,當您將類型轉換轉換為未知組件類型的數組時,編譯器將在此處向您發出未經檢查的強制轉換警告。 這意味着強制轉換可能會在運行時失敗。 例如,如果您在上述方法中具有該代碼:

建議的類型安全代碼。

public <E> E[] getArray(Class<E> clazz, int size) {
    @SuppressWarnings("unchecked")
    E[] arr = (E[]) Array.newInstance(clazz, size);

    return arr;
}

答案中提供了解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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