如何在 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 访问的扫描仪,任何人都可以就如何执行此操作提供一些指导吗?非常感谢您的帮助!
只需在你main
class中使用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() 方法中创建并连接您的对象。
我有一个使用多个 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 访问的扫描仪,任何人都可以就如何执行此操作提供一些指导吗?非常感谢您的帮助!
只需在你main
class中使用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() 方法中创建并连接您的对象。