[英]Is there any way I can create/get and return a Class<T<?, ?>> object?
[英]Is there any way I can use a Scanner object in a different class?
所以我有一个简单的 Scanner 对象:
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 方法访问它。
您可以在其他类中创建Scanner
的新实例。
解决这个问题的常见设计模式是依赖注入。 依赖注入的一种形式称为构造函数注入。 为此,创建一个接受类所依赖的对象的构造函数。 然后当你实例化那个类时,你传入你希望它操作的对象(在你的例子中是你的扫描仪)。
例子
Main
- 调用者类:
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
AnotherReader anotherReader = new AnotherReader(scan);
anotherReader.readSomething();
}
}
AnotherReader
- 需要Scanner
依赖的类:
public class AnotherReader {
Scanner scan;
public AnotherReader(Scanner scan)
this.scan = scan;
}
public void readSomething(){
String line = scan.nextLine();
// Do something
}
}
您可以在调用中将 Scanner 对象的引用传递给该方法。 像method(Scanner sc)
您可以尝试inheritance
:超类:
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
}
使用继承,子类可以继承超类中的扫描仪对象。 我希望这有效。如果出现问题,请告诉我。
也可以在没有继承的情况下完成(不扩展):
只需在相关的子类方法中创建超类的对象,如下所示:
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 takeIn=superclass.scan.next();
我解决这个问题的方法是在我调用的需要使用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);
}
}
调用类.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)
package mypackage; import java.util.Scanner; public class MyScanner { static Scanner scan = new Scanner(System.in); public static String scan() { return scan.next(); } public static String scanLine() { return scan.nextLine(); } public static int scanInt() { return scan.nextInt(); } }
通过(静态)从 mypackage 的 MyScanner 类导入所有方法,在任何地方使用它。
package yourpackage; import static mypackage.MyScanner.*; public class Main { public static void main(String[] args) { System.out.print("put an integer: "); int a = scanInt(); System.out.println("int a = " + a); } }
如果您不想使用静态导入,请更改import static mypackage.MyScanner.*;
在 MyScanner.java 中import mypackage.MyScanner;
. 通过这样做,您不能再直接调用您的扫描器方法,您需要指定包含这些方法的类。 例如: MyScanner.scanInt()
、 MyScanner.scan()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.