0

in と out の 2 つのオブジェクトがある場合、それらのオブジェクトをどこでも静的または使用可能にすることは可能ですか? プログラムのどこにいても入力できるように

out.println("Hello!");

そのように異なるオブジェクトに出入りする必要なく機能しますか?

happyCat(BufferedReader in, PrintStream out);

これが可能かどうか教えてください。

BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintStream out = new PrintStream(server.getOutputStream());
4

3 に答える 3

1

System.setIn()およびを呼び出すことにより、Java 環境のデフォルトの入出力ストリームを変更できます。クラス System の javadoc はこちらをSystem.setOut()参照してください。コードの一部がデフォルト ストリームを参照すると、インスタンスに「リダイレクト」されます。

System.setOut(myOutput);
System.setIn(myInput);
...
System.out.println("hello"); // This will print to your output stream
System.in.read();             // This will read from your input stream
于 2013-05-20T19:09:21.673 に答える
1

クラス Streams を作成し、 static を使用できます。

class Streams {
   // I don't know where "server" come from
   public static BufferedReader in = ...
   public static PrintStream out = ...

}

次に使用します:

 Streams.in and Streams.out
于 2013-05-20T19:06:01.850 に答える
0

いいえ。すべてのソース ファイルで、次のいずれかを静的にインポートする必要がinありoutます。

import static pkg.MyGlobals.in;
import static pkg.MyGlobals.out;

または、次のように用途を限定する必要があります

pkg.MyGlobals.out.method(...)

暗黙的にインポートされるような新しいパッケージを定義する方法はなくjava.lang、静的メンバーが暗黙的にインポートされるクラスはありません。

で定義されたメソッドだけがObjectどこでも非修飾で利用できます。これは、それらを参照できるコードを含むことができるすべてのコンテキストで継承されるためです。


セクション 6.5.6.1 単純な式の名前では、単純な名前がオブジェクトのフィールドとどのように一致inするかについて説明しています。out

式名が単一の識別子で構成されている場合、識別子が発生する時点で、ローカル変数、パラメータ、またはフィールドの可視性 (§6.4.1) を示す宣言が 1 つだけ存在する必要があります。そうしないと、コンパイル時エラーが発生します。

その出発点からリンクをたどると、これには隠されたメカニズムがないことがわかります。

于 2013-05-20T19:11:12.163 に答える