如何在Java中的多个类中使用相同的Scanner

时间:2015-03-28 22:00:09

标签: java class java.util.scanner

我有一个使用多个类的程序,我希望其他类能够访问我在主类中声明的相同扫描程序,我假设它将使用某种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);

读者扫描仪是我希望能够访问组成该程序的其他类的人,任何人都可以给我一些指导我如何做到这一点?非常感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

只需在public static final Scanner in = new Scanner(System.in);课程中使用main即可。 之后,您可以通过MainClassName.in从任意位置拨打电话。

另外,请注意传递给Scanner的参数。我想你想把InputFile放进Scanner,而不是filename =)

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

答案 1 :(得分:0)

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

您正在寻找像Singleton之类的东西,这是您的软件回声系统所独有的类的实例。

对于您的示例,您可以执行以下操作:

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

答案 2 :(得分:0)

回答关于依赖注入的问题:这里是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()方法中创建和连接对象。