Java: 为什么可变参数在 Eclipse 中没有按预期更新?
Java: Why aren't variable parameters updating as expected in Eclipse?
根据我下面的代码,当我调试并到达 me
(jurl 实例)中调用 con.setRequestMethod(method)
的位置时,变量选项卡首先显示:
Name Value
----------- ----------------------------------------
this jurl (id=128)
-con HttpsURLConnectionImpl (id=129)
-method "GET" (id=116)
method "POST" (id=118)
furl "https://www.someurl.com/login" (id=117)
如果我没理解错的话,难道 con.setRequestMethod("POST")
不应该把 this.con.method (id 116) 从 "GET" 改成 "POST" 吗?因为它不是。一旦调试通过 con.setRequestMethod(method)
,this.con.method 仍然显示 "GET"。所以要么我在这里遗漏了一些东西,要么 Eclipse 的变量跟踪器被窃听了。
View.java
public Class View {
private AccountManager accountManager = new AccountManager(this);
private void login() {
String username = textuser.getText();
String password = textpass.getText();
String locid = getLocId();
Hashtable result = null;
result = accountManager.login(username, password, locid);
}
}
AccountManager.java
public class AccountManager {
public View Parent = null;
private String USERNAME = null;
private String PASSWORD = null;
private String locid = null;
public View Parent = null;
public AccountManager(View view) {
this.Parent=view;
this._locationAssistant = l;
}
public Hashtable login(String username, String password, String locid) {
final String USERNAME = username;
final String PASSWORD = password;
this.USERNAME = username;
this.PASSWORD = password;
Hashtable result = new Hashtable();
URLVisitor vis = new URLVisitor();
vis.setURL("https://www.someurl.com/login");
vis.setMethod("POST");
vis.execute();
}
}
URLVisitor.java
public class URLVisitor {
private String method= "GET";
private String url;
public jurl me = null;
public URLVisitor() {
}
public void setURL(String url) {
this.url = url;
}
public void setMethod(String method) {
this.method = method;
}
public void execute() {
me = new jurl(this.method, this.url);
}
}
jurl.java
public class jurl {
private URL url;
private HttpURLConnection con = null;
public jurl(String method, String furl) {
try {
url new URL(furl);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(method);
}
}
}
As soon as debug passes con.setRequestMethod(method), this.con.method still says "GET".
在 setRequestMethod
调用 returns 之后,您不能指望该字段会发生变化。在我看来,调试器运行正常/正确。
也有可能我误解了您,您确实看到了该字段的过时值。尝试让调试器重新获取字段中的值。
但这不应该影响代码的实际行为方式,无论您是否 运行 它来自调试器。
最后,请注意您的代码实际上并未调用 connect
或试图查看状态或内容,因此 method
字段的状态是学术性的。它不会被使用...
我找到了。创建原始 HttpURLConnection con
时,con.method
的默认值为 "GET"
。但是,当 con.setRequestMethod
被调用时,对于 me
,它是在已经 运行 vis
实例中创建的实例,它的 con.setRequestMethod("POST")
没有反映在vis.me.con.method
,但在 vis.me.con.delegate.method
中下降了一级。
根据我下面的代码,当我调试并到达 me
(jurl 实例)中调用 con.setRequestMethod(method)
的位置时,变量选项卡首先显示:
Name Value
----------- ----------------------------------------
this jurl (id=128)
-con HttpsURLConnectionImpl (id=129)
-method "GET" (id=116)
method "POST" (id=118)
furl "https://www.someurl.com/login" (id=117)
如果我没理解错的话,难道 con.setRequestMethod("POST")
不应该把 this.con.method (id 116) 从 "GET" 改成 "POST" 吗?因为它不是。一旦调试通过 con.setRequestMethod(method)
,this.con.method 仍然显示 "GET"。所以要么我在这里遗漏了一些东西,要么 Eclipse 的变量跟踪器被窃听了。
View.java
public Class View {
private AccountManager accountManager = new AccountManager(this);
private void login() {
String username = textuser.getText();
String password = textpass.getText();
String locid = getLocId();
Hashtable result = null;
result = accountManager.login(username, password, locid);
}
}
AccountManager.java
public class AccountManager {
public View Parent = null;
private String USERNAME = null;
private String PASSWORD = null;
private String locid = null;
public View Parent = null;
public AccountManager(View view) {
this.Parent=view;
this._locationAssistant = l;
}
public Hashtable login(String username, String password, String locid) {
final String USERNAME = username;
final String PASSWORD = password;
this.USERNAME = username;
this.PASSWORD = password;
Hashtable result = new Hashtable();
URLVisitor vis = new URLVisitor();
vis.setURL("https://www.someurl.com/login");
vis.setMethod("POST");
vis.execute();
}
}
URLVisitor.java
public class URLVisitor {
private String method= "GET";
private String url;
public jurl me = null;
public URLVisitor() {
}
public void setURL(String url) {
this.url = url;
}
public void setMethod(String method) {
this.method = method;
}
public void execute() {
me = new jurl(this.method, this.url);
}
}
jurl.java
public class jurl {
private URL url;
private HttpURLConnection con = null;
public jurl(String method, String furl) {
try {
url new URL(furl);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(method);
}
}
}
As soon as debug passes con.setRequestMethod(method), this.con.method still says "GET".
在 setRequestMethod
调用 returns 之后,您不能指望该字段会发生变化。在我看来,调试器运行正常/正确。
也有可能我误解了您,您确实看到了该字段的过时值。尝试让调试器重新获取字段中的值。
但这不应该影响代码的实际行为方式,无论您是否 运行 它来自调试器。
最后,请注意您的代码实际上并未调用 connect
或试图查看状态或内容,因此 method
字段的状态是学术性的。它不会被使用...
我找到了。创建原始 HttpURLConnection con
时,con.method
的默认值为 "GET"
。但是,当 con.setRequestMethod
被调用时,对于 me
,它是在已经 运行 vis
实例中创建的实例,它的 con.setRequestMethod("POST")
没有反映在vis.me.con.method
,但在 vis.me.con.delegate.method
中下降了一级。