以下代码来自java.lang.System.console()方法:
private static volatile Console cons = null;
/**
* Returns the unique {@link java.io.Console Console} object associated
* with the current Java virtual machine, if any.
*
* @return The system console, if any, otherwise <tt>null</tt>.
*
* @since 1.6
*/
public static Console console() {
if (cons == null) {
synchronized (System.class) {
cons = sun.misc.SharedSecrets.getJavaIOAccess().console();
}
}
return cons;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这是这种方法的一个错误.我们应该这样写:
public static Console console() {
if (cons == null) {
synchronized (System.class) {
if (cons == null)
cons = sun.misc.SharedSecrets.getJavaIOAccess().console();
}
}
return cons;
}
Run Code Online (Sandbox Code Playgroud)
我对吗?你怎么看?
如果您查看 的实现,JavaIOAccess您会发现其中有一个空检查:
public Console console() {
if (istty()) {
if (cons == null)
cons = new Console();
return cons;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
由于此方法是初始化该变量的唯一方法,因此嵌套空检查驻留在另一个方法中并不是问题。获得两个不同的Console物体仍然是不可能的。
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |