Как вернуть элемент arrayList в метод? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть класс Repertory, который содержит список файлов, и внутри этого класса Repertory я хочу написать метод, который возвращает файл с определенным именем. Я попробовал это, но это не сработало. Ваша помощь будет оценена 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);
            }
        }
    }
}

он говорит: «Этот метод должен возвращать результат типа File»

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Решение выглядит так просто:

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;
    }
}

Вывод:

c
null
0 голосов
/ 23 октября 2019

Вам нужно как-то справиться с ситуацией, когда файл не существует - поэтому вам нужно либо сгенерировать исключение (возможно, не лучшее решение, но также возможное), либо вернуть какой-то специальный «маркерный объект», указывающий, что файл не был найден

Я думаю, что возвращение null - плохая идея и индикатор плохого дизайна - просто подумайте обо всех ситуациях NPE, о которых вам нужно будет помнить в будущем

Лучше вернуться Необязательно (если у вас 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(...)
0 голосов
/ 22 октября 2019

попробуйте что-то вроде этого:

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, чтобы указать отсутствие файла, вы также можете вызвать исключение.

Кроме исключений, лучше иметь одну точку выхода в методе. Наличие повсюду множества возвратов затрудняет понимание и сопровождение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...