如果您将扫描仪作为参数传递,它的状态也会被传递吗?

Mon*_*ica 1 java java.util.scanner

我有一个扫描仪从文本文件中读取.当它到达文件中的某一行时,我希望能够调用一个方法,该方法将Scanner用作当前状态的参数 - 例如,我希望扫描程序(以及使用的文件)在它到底是什么线.

public static void createEntry(File list, int mediaTypeNum, String mediaType) throws FileNotFoundException {
    Scanner mediaReader = new Scanner(list);
    int occurrence = mediaTypeNum;
    int scannerCounter = 0;
    String match;
    String title = "";
    String director = "";
    while (mediaReader.hasNext() && scannerCounter < occurrence) {
        match = mediaReader.nextLine();
        if (match.equalsIgnoreCase(mediaType)) {
            scannerCounter++;
            if (scannerCounter == occurrence) {
                // based on type, create the media object
                // createMediaObject(list, mediaReader, mediaType)
                title = mediaReader.nextLine();
                director = mediaReader.nextLine();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

createMediaObject()将有一个switch case,根据具体情况,Scanner将读取一些以下行,直到有一个空行.对于每种媒体类型,行数不同.

先感谢您!

biz*_*lop 6

当然,事实上,Java中的任何对象都是如此.在任何时候都不会创建对象的隐式副本.*

你需要注意的是,它Scanner具有"顺序"状态,如果你经常传递它,很容易忘记它处于什么状态.特别是如果执行条件处理,不同的执行路径可能最终将它留在不同的位置.

一个好的方法是始终在方法Javadoc中记录Scanner预期的状态以及最后留下的状态.

*这个声明有一个很大的警告:多线程.但是在这里详细讨论这个问题将是非常不合时宜的.