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

时间:2013-01-18 22:18:58

标签: java java.util.scanner

我有一个从文本文件中读取的扫描仪。当它到达文件中的某一行时,我希望能够调用一个方法,该方法使用Scanner作为当前状态的参数 - 例如,我希望扫描程序被传递(连同所使用的文件)at它到底是什么线。

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

createMediaObject()将有一个开关案例,根据案例,扫描仪将读取一些以下行,直到有一个空行。对于每种媒体类型,行数不同。

提前谢谢!

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:2)

不确定。您将引用传递给Scanner对象,以便接收者看到相同的实例和相同的状态。