Java 我可以在不同的类中使用Scanner对象吗?
所以我有一个简单的扫描器对象:Java 我可以在不同的类中使用Scanner对象吗?,java,java.util.scanner,user-input,Java,Java.util.scanner,User Input,所以我有一个简单的扫描器对象: Scanner scan = new Scanner (System.in); 我试图在一个我在另一个类中声明的方法中使用这个Scanner对象。有没有办法做到这一点?我还尝试使用: public static final Scanner scan = new Scanner(System.in); 但这并没有真正起作用 public static final Scanner scan = new Scanner(System.in); 正如您已将Scann
Scanner scan = new Scanner (System.in);
我试图在一个我在另一个类中声明的方法中使用这个Scanner对象。有没有办法做到这一点?我还尝试使用:
public static final Scanner scan = new Scanner(System.in);
但这并没有真正起作用
public static final Scanner scan = new Scanner(System.in);
正如您已将Scanner实例声明为public和static一样。因此,您可以使用类引用访问它
另一个类中的代码
String intpu = ClassName.scan.next();
ClassName是定义它的类的名称
可以通过其他方式实现这一点:
将此传递给要使用它的另一个类的方法
如果将Scanner实例定义为类的成员,则创建类的实例并使用getter方法访问它
您可以在另一个类中创建扫描仪的新实例
String intpu = ClassName.scan.next();
可以在调用中将Scanner对象的引用传递给该方法。 类似methodScanner sc的东西您可以尝试继承: 超级班:
public class superclass
{
Scanner scan=new Scanner(System.in);
//scanner object declared globally
//constructor
//other methods etc.
}
子类:
public class subclass extends superclass
{
//the scanner object can be inherited
}
使用继承,子类可以继承超类中的scanner对象。
我希望这能奏效。如果出了什么问题,请告诉我
也可以不继承而不扩展:
只需在相关子类方法中创建超类的对象,如下所示:
superclass ob=new superclass();
//created superclass object
String takeIN= ob.scan.next();
/*refers to scanner object in superclass because scanner object is declared a field(global object) in superclass.*/
按照您的示例,如果超类中的scanner对象是静态的,您可以像这样简单地使用它:
Scanner takeIn=superclass.scan.next();
解决这个问题的一个常见设计模式是依赖项注入。依赖项注入的一种形式称为构造函数注入。为此,创建一个接受类所依赖的对象的构造函数。然后,当您实例化该类时,您传入希望它在您的扫描器中操作的对象 范例 主-调用方类:
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
AnotherReader anotherReader = new AnotherReader(scan);
anotherReader.readSomething();
}
}
另一个Reader-需要扫描程序依赖项的类:
public class AnotherReader {
Scanner scan;
public AnotherReader(Scanner scan)
this.scan = scan;
}
public void readSomething(){
String line = scan.nextLine();
// Do something
}
}
我解决这个问题的方法是将Scanner参数添加到我正在调用的需要使用Scanner的类的方法中,然后在调用该方法时将Scanner变量作为参数传递 我的主要方法是:
import java.util.Scanner;
public class ScannerTest
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
CalledClass cC = new CalledClass();
cC.testMethod(input);
}
}
CalledClass.java:
import java.util.Scanner;
public class CalledClass
{
public void testMethod(Scanner x)
{
System.out.println("Enter anything");
String myString = x.next();
System.out.println(myString);
}
}
这不是最漂亮的东西,但它很管用。
我是这样做的:
在新包中创建MyScanner.java,在本例中为:mypackage
包我的包;
导入java.util.Scanner;
公共类MyScanner
{
静态扫描仪扫描=新的ScannerSystem.in;
公共静态字符串扫描
{
返回scan.next;
}
公共静态字符串扫描线
{
返回scan.nextLine;
}
公共静态整型扫描
{
返回scan.nextInt;
}
}
通过静态导入mypackage的MyScanner类中的所有方法,可以在任何地方使用它
包装你的包装;
导入静态mypackage.MyScanner.*;
公共班机
{
公共静态无效字符串[]args
{
System.out.print输入一个整数:;
int a=扫描int;
System.out.printlint a=+a;
}
}
如果不想使用静态导入,请更改导入静态mypackage.MyScanner.*;在MyScanner.java中导入mypackage.MyScanner;。这样,您就不能再直接调用scanner方法了,您需要指定包含这些方法的类。例如:MyScanner.scanInt,MyScanner.scan。当我尝试这样做时,它不会编译,并且表示表达式的开头非法。你认为问题可能是因为我在定义的类和另一个类中使用了这个Scanner对象吗?@Subhan你如何使用它?在定义类时,您可能正在尝试读取输入并初始化类成员。您需要在任何方法中使用此选项。不能在成员声明中调用实例方法。可以调用静态方法。