簡體   English   中英

如何解決類型安全警告從集合到列表的未經檢查的強制轉換 <File> 沒有抑制注釋的Java 6

[英]How to address Type safety warning Unchecked cast from Collection to List<File> Java 6 without suppress annotation

我有以下代碼:

public void someMethod(String directory,final String extension) {

    List<File> fileList = (List<File>) FileUtils.listFiles(new File(directory), new String[] {extension} , true); 
    File[] files = new File[fileList.size()];
    // ...

    for(File f : files) {
       // looping...
    }
}

我的代碼中出現黃色的sqiggley行,並顯示警告:

類型安全性:從集合到列表的未經檢查的演員表

我怎樣才能解決這個問題?

編輯1:

請不要使用抑制注釋,我想了解發生了什么。 我嘗試這樣做:

if(fileList instanceof List<?>) {
    // data processing here...
}

這並沒有使警告消失...這真的困擾我...

編輯2:

我決定這樣做:

List<?> fileList = (List<?>) FileUtils.listFiles(new File(directory), new String[] {extension} , true);

File[] files = new File[fileList.size()];

int i=0;
if(fileList instanceof List<?>) {
    for (Object obj : fileList) {
        try {
            File file = (File)obj;
            files[i] = new File(file.getCanonicalPath());
        } catch (IOException e) {
            e.printStackTrace();
        }
        i++;
    }
}

好吧,首先, CollectionList的超級接口,因此,除非您確定listFiles()始終返回List ,否則您不應該向下轉換(以避免ClassCastException )。 在大多數情況下,如果您需要列表而不是集合,則明智的做法是僅從返回的集合中創建一個新列表,例如,

Collection<File> myCollection = FileUtils.listFiles(...);
List<File> myList = new ArrayList<File>(myCollection);

另外,如果您要做的只是將集合轉換為數組,則根本不需要創建任何列表。 您要做的就是:

Collection<File> myCollection = FileUtils.listFiles(...);
File[] myArray = myCollection.toArray(new File[myCollection.size()]);

如果編譯器繼續向您發出警告,則剩下的唯一問題在於listFiles()方法本身;否則,您可能會遇到其他問題。 它返回原始類型 Collection而不是通用類型 Collection<File> 要刪除相關的警告,請更新至Commons IO最新版本 ,或簡單地適當插入@SuppressWarnings("unchecked")批注,例如,

@SuppressWarnings("unchecked")
Collection<File> myCollection = FileUtils.listFiles(...);

為什么需要List<File> 為什么不這樣做: Collection<File> files=FileUtils.listFiles(...) 這不會給您警告,您仍然可以遍歷文件Collection

暫無
暫無

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

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