如何防止其他类更改System.out?我想在App.main中设置System.out PrintStream并使其成为最终版本,因此无法再从App的其他部分进行更改。可能吗?任何hacky方式都可以:)
答案 0 :(得分:4)
我快速查看代码显示可以使用SecurityManager来防止更改。 ;)
public static void setErr(PrintStream err) {
checkIO();
setErr0(err);
}
private static void checkIO() {
SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("setIO"));
}
}
您可以使用Thread.currentThread()。getStackTrace()来识别调用者。
答案 1 :(得分:0)
您可以使用自定义安全管理器执行此操作。实现安全管理器,如果非自动化类使用参数“setIO”调用它,则会抛出AccessControlException,即覆盖checkPermission();
方法。使用new Throwable().getStackTrace()
标识来电者。