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

Java 如何在方法中返回arrayList元素?,java,oop,Java,Oop,我有一个Repertory类,它包含一个文件列表,在这个Repertory类中,我想编写一个方法,返回一个具有特定名称的文件。我试过了,但没用。谢谢你的帮助 附:代码不完整。我只是给了你一个想法 class File{ name, ........} class Repertory { fichiers = new ArrayList<File>(); public File get_File(String fileName){ File f;

我有一个Repertory类,它包含一个文件列表,在这个Repertory类中,我想编写一个方法,返回一个具有特定名称的文件。我试过了,但没用。谢谢你的帮助 附:代码不完整。我只是给了你一个想法

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);
            }
        }
    }
}
类文件{name,…}
课堂剧目{
fichiers=newarraylist();
公共文件获取文件(字符串文件名){
文件f;
对于(int i=0;i

它说“此方法必须返回File类型的结果”

请尝试以下操作:

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;
对于(int i=0;i
您之所以会出现此错误,是因为您有一个返回路径,如果找不到文件,该路径将不会返回任何内容。现在,当找到一个文件时,将文件名指定给f后,循环将退出。如果您不想返回null来表示没有文件,还可以引发异常


除了异常,最好在方法中有一个单一的出口点。到处都有大量的返回使得代码更难理解和维护。

您需要以某种方式处理文件不存在的情况-因此您需要抛出异常(可能不是最好的解决方案,但也是可能的),或者返回一些特殊的“标记对象”,指示找不到文件

我认为返回null是一个坏主意,也是一个坏设计的标志——只要想想你将来需要记住的所有NPE情况就可以了

更好的方法是返回可选的(如果您的JDK大于8,那么可以使用Guava)


或者在循环之后添加
returnnull
。最好保持作用域中没有变量,当您不需要它们时,通常会减少心理开销。在你的头脑中,必须处理许多变量,并回溯它们被设置的位置以及它们最终将被分配的值,这是很难理解和调试的(特别是当你的方法只包含一个提前退出的循环时)。确保正确地缩进代码。它使读取、理解和发现错误(如循环后缺少返回)变得更容易。如果您仅从循环中返回,则需要在循环完成后返回一些内容,以涵盖找不到文件的情况。
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(...)