如何在 Java 中的多个 类 中使用相同的扫描仪

How to use the same Scanner across multiple classes in Java

我有一个使用多个 classes 的程序,我希望其他 classes 能够访问我在主 class 中声明的同一个扫描器,我假设它会使用某种 get 方法来完成,但是我找不到任何资源来帮助我。

这是我在主 class 中制作的扫描器:

  Scanner in = new Scanner(System.in);
            System.out.println("Enter a filename");
            String filename = in.nextLine();
            File InputFile = new File (filename);
            Scanner reader = new Scanner(filename);

reader 扫描仪是我希望能够跨组成该程序的其他 class 访问的扫描仪,任何人都可以就如何执行此操作提供一些指导吗?非常感谢您的帮助!

只需在你mainclass中使用public static final Scanner in = new Scanner(System.in);。 之后你可以通过 MainClassName.in.

从任何地方调用它

此外,请注意传递给 Scanner 的参数。我猜您想将 InputFile 放入 Scanner,而不是 filename =)

File InputFile = new File (filename);
Scanner reader = new Scanner(filename);

有所谓的design patterns可以帮助您处理这些日常问题。他们展示了最佳实践。

您正在寻找类似 Singleton 的东西,它是您的软件回声系统独有的 class 实例。

对于您的示例,您可以这样做:

public class MyScanner{
   private static MyScanner instance = new MyScanner();
   private MyScanner(){
       // init the scanner
   }

   //Get the only object available
   public static MyScanner getInstance(){
      return instance;
   }

   public void read(File f){
      // read your file
   }
}

回答你关于依赖注入的问题:这里是 dependency injection 的粗略概念(通过构造函数):

public void wire() {
    ...
    Scanner reader = new Scanner(filename);
    ClassA objectA = new ClassA(reader);
    ClassB objectB = new ClassB(reader);
    ...
}

class A(class B 会有类似的构造函数):

public class ClassA {

    private Scanner reader;

    public ClassA(Scanner reader) {
        this.reader = reader;
    }
    ...
}

所以我们的想法是您在 wire() 方法中创建并连接您的对象。