我想嘲笑使用JUnit,EasyMock的或PowerMock静态final变量以及模拟一个国际化类.我怎么做?
我碰巧在我的工作场所遇到过Java代码.这是场景:有两个类 - ClassA和ClassB.
ClassA除了4个公共静态最终字符串值之外什么都没有.它的目的是使用那些值ClassA.variable(不要问我为什么,这不是我的代码).
ClassB进口ClassA.我编辑了字符串值ClassA并对其进行了编译.当我跑步时,ClassB我可以看到它使用的是旧值 - 而不是新值.我必须重新编译ClassB才能使用新的值ClassA!(我不得不重新编译其他导入的类ClassA!)
这只是因为JDK 1.6或我之前应该知道重新编译的ClassB!开导我.:)
以下是java.lang.System类中的代码(JDK版本1.6)
public final static PrintStream out = nullPrintStream(); //out is set to 'null'
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
Run Code Online (Sandbox Code Playgroud)
当我们System.out.println("Something");在代码中写入时,为什么即使'out'设置为'null'也不会得到NullPointerException
无论如何out将通过setOutSystem类中的以下方法设置
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
Run Code Online (Sandbox Code Playgroud)
Theyn为什么JLS需要nullPrintStream方法?