簡體   English   中英

如何在方法中返回 arrayList 元素?

[英]How to return an arrayList element in a method?

我有一個包含文件列表的目錄 class,在這個目錄 class 中,我想編寫一個返回具有特定名稱的文件的方法。 我試過這個,但沒有用。 您的幫助將不勝感激 ps:代碼不完整。 我只是給你一個想法。

class File{ name, ........}

class Repertory {
    fichiers = new ArrayList<File>();

    public File get_File(String fileName){
        File f;
        for (int i = 0; i < this.files.size(); i++) {
            if(this.files.get(i).name.equals(fileName)) {
                f = this.files.get(i);
                return (f);
            }
        }
    }
}

它說“此方法必須返回文件類型的結果”

解決方案很簡單,如下所示:

public File getFile(String fileName){
    File file=new File(fileName);
    int index=files.indexOf(file);
    if(index!=-1)
        return files.get(index);
    return null;
}

例如,您可以使用以下程序快速測試我的解決方案:

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Demo { 
    static List<File> files=new ArrayList<File>();
    public static void main(String[] args) {        
        files.add(new File("a"));
        files.add(new File("b"));
        files.add(new File("c"));
        files.add(new File("d"));
        System.out.println(getFile("c"));
        System.out.println(getFile("x"));        
    }
    public static File getFile(String fileName){
        File file=new File(fileName);
        int index=files.indexOf(file);
        if(index!=-1)
            return files.get(index);
        return null;
    }
}

Output:

c
null

當文件不存在時,您需要以某種方式處理這種情況 - 因此您需要拋出異常(可能不是最好的解決方案,但也是可能的)或返回一些特殊的“標記對象”,指示未找到該文件

我認為返回null是個壞主意,也是糟糕設計的一個指標——想想你將來需要記住的所有 NPE 情況

更好的是返回Optional (如果你的 JDK 比 8 舊,你可以使用 Guava)

public Optional<File> get_File(String fileName){
    for (int i = 0; i < this.files.size(); i++) {
        if(this.files.get(i).name.equals(fileName)) {
            return Optional.of(this.files.get(i));
        }
    }
    return Optional.empty();
}

然后在調用時處理這個

get_File("filename").orElse(...) // or even .orElseThrow(...)

嘗試這樣的事情:

public File get_File(String fileName){
    File f = null;
    for (int i = 0; i < files.size(); i++) {
        if(files.get(i).name.equals(fileName)) {
            f = files.get(i);
            break;
        }
    }
    return f;
}

您收到該錯誤是因為如果找不到文件,您的返回路徑不會返回任何內容。 現在,當找到文件時,將文件名分配給 f 后循環退出。 如果不想返回 null 表示沒有文件,也可以引發異常。

除了例外,最好在方法中有一個單點退出。 到處都有一堆返回會使代碼更難理解和維護。

暫無
暫無

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

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