[英]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.