gpt4 book ai didi

java - 使用可变参数时出现意外行为 - java

转载 作者:行者123 更新时间:2023-12-01 21:49:32 26 4
gpt4 key购买 nike

我对 java varargs 非常陌生。我编写了一个 java 方法来根据以下场景返回当前 session 。

返回 session 的方法

============================

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() 时,我们不能发送任何参数 - 如果存在,它将返回当前 session ,否则将创建一个新 session

2) 我们可以将 true 作为 getSession(true) 发送 - 与 getSession() 相同

3) 我们可以发送 false 作为 getSession(false) - 如果 session 存在,它将返回一个 session ,否则它不应该创建一个新 session

我选择了可​​变参数,因为我们传递的参数不是决定性的,可以没有参数,也可以有 true/false。

我在公共(public)方法中调用了这个私有(private)方法,如下所示。

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”。

但实际输出是它记录“这是真”和“这是假”,但不是“外部真假”。

任何人都可以帮助我实现预期的结果,并给我一些解释我做错了什么以及可变参数的使用吗?

最佳答案

你似乎想要

boolean flag = status.length == 0 || status[0];
log.info("this is " + flag);
session = servletRequest.getSession(flag);
return session;

但是,这样写可能更简单

private HttpSession getSession() {
return getSession(true);
}

private HttpSession getSession(boolean status) {

虽然这更长,但可能更清晰并且更少困惑。

关于java - 使用可变参数时出现意外行为 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com