我的安装程序在安装过程中将一些信息存储在单例类中。现在,我注意到在提升的操作中,singleton类没有相同的实例。到目前为止,我还没有找到任何解决方法/解决方案,使它们共享同一个实例。所以,我决定确保,如果任何人想要获得singleton的实例,他们必须从一个不相关的环境中调用。让我们假设singleton如下所示:
public class InvestigatorReport {
private final List<Report> reports = new ArrayList<>();
private final static InvestigatorReport INSTANCE = new InvestigatorReport();
private InvestigatorReport() {
MyLogger.logInfo(getClass(), "initiating...");
}
public static InvestigatorReport getInstance(Context context) {
if (context.hasBeenElevated()) {
throw new IllegalAccessError(
"this method must be called unelevated!");
}
return INSTANCE;
}
private boolean addReport(Report report) {
return reports.add(report);
}
}
但问题是,在某些情况下,我必须从提升的action类调用此add report。因此,我在我的高级动作课上尝试了以下几点:
if (context.hasBeenElevated()) {
return (Boolean) context.runUnelevated(new RemoteCallable() {
@Override
public Serializable execute() {
return getInstance(context).addReport(report);
}
});
}
但是,您可以看到,如果我将同一个上下文对象从提升的action类传递到
RemoteCallable
所以,即使我在经营一个不知名的班级
context.hasBeenElevated()
仍然返回true。
除了上下文之外,还有其他方法可以检查标高吗?如果你有其他更好的办法阻止任何人打电话给单身汉
getInstance()
方法,我洗耳恭听。