如何在Java中跨多个类使用同一个Scanner

xxhby3vn  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(156)

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

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

阅读器扫描器是我希望能够跨程序中的其他类访问的扫描器。
有谁能给予我一些如何做这件事的指导吗?

csbfibhn

csbfibhn1#

只需在main类中使用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);
ppcbkaq5

ppcbkaq52#

有所谓的design patterns可以帮助你处理这样的日常问题,它们显示了最佳实践。
您正在寻找类似Singleton的东西,它是软件echosystem所特有的类的示例。
对于您的示例,您可以执行以下操作:

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

qyuhtwio3#

回答您关于依赖项注入的问题:下面是dependency injection大致概念(通过构造函数):

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

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

public class ClassA {

    private Scanner reader;

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

我们的想法是用wire()方法创建并连接对象。

相关问题