0

如果我有两个对象,进出,是否可以使这些对象成为静态或随处可用?这样无论我在程序中的哪个位置,我都可以输入

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

您可以创建一个类 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 回答
1

System.setIn()您可以通过调用and来更改 Java 环境的默认输入和输出流System.setOut(),请在此处查看类 System 的 javadoc。当任何一段代码引用默认流时,它们将被“重定向”到您的实例。

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 回答
0

不,在每个源文件中,您要么必须静态导入您的inand out

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

或者你将不得不限定用途,如

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

没有办法定义隐式导入的新包java.lang,也没有隐式导入静态成员的类。

只有定义的方法在Object任何地方都是无限制的,这仅仅是因为它们在每个可以包含可以引用它们的代码的上下文中被继承。


第 6.5.6.1 节简单表达式名称解释了简单名称如何inout对象的字段相匹配:

如果表达式名称由单个标识符组成,那么在标识符出现的点处必须有一个声明表示局部变量、参数或可见字段(第 6.4.1 节)。否则,会发生编译时错误。

从该起点跟随链接应该使您相信没有隐藏的机制。

于 2013-05-20T19:11:12.163 回答