【发布时间】:2016-05-24 15:51:20
【问题描述】:
我对java varargs非常陌生。我已经编写了一个java方法来根据下面的场景返回当前会话。
返回会话的方法
============================
private HttpSession getSession(boolean... status) {
if (status[0]) {
log.info("this is true");
session = servletRequest.getSession(true);
return session;
} else if (!status[0]) {
log.info("this is false");
session = servletRequest.getSession(false);
return session;
}
log.info("outer part true false");
session = servletRequest.getSession();
return session;
}
我期待的场景
=======================
1) 当调用此方法作为 getSession() 时,我们不能发送任何参数 - 如果存在,它将返回当前会话,否则将创建一个新会话
2) 我们可以将 true 作为 getSession(true) 发送 - 与 getSession() 相同
3) 我们可以将 false 作为 getSession(false) 发送 - 如果会话存在,它将返回会话,否则不应创建新会话
我选择可变参数是因为我们传递的参数不是行列式的,可以没有参数,也可以有真/假。
我在公共方法中调用了这个私有方法,如下所示。
public static void jsFunction_invalidate(Context cx, Scriptable thisObj, Object[] args, Function funObj)
throws ScriptException {
String functionName = "invalidate";
int argsCount = args.length;
if (argsCount != 0) {
HostObjectUtil.invalidNumberOfArgs(hostObjectName, functionName, argsCount, false);
}
SessionHostObject sho = (SessionHostObject) thisObj;
sho.getSession(false).invalidate();
}
所以预期的行为是当我们调用这个 getSession(false) 时,它应该进入 esle if 条件并记录消息“this is false”。
但实际输出是同时记录“这是真的”和“这是假的”,而不是“外部真假”。
谁能帮助我实现预期的结果并给我一些解释我做错了什么以及使用可变参数?
【问题讨论】:
-
您确定您当前的代码在使用 getSession() 时可以运行吗?它应该抛出一个 ArrayIndexOutOfBounds 异常。如果您没有参数,您对 status[0] 的访问将无效。在这种情况下,我建议使用“函数重载”。
-
是的,它抛出了你上面提到的异常