Java:为什么Eclipse中没有按预期更新变量参数?

时间:2015-01-10 01:34:17

标签: java eclipse instantiation

根据我的下面的代码,当我调试并且我到达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")不应该从" GET"更改this.con.method(id 116)到" 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);    
    }
  }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

我找到了。创建原始HttpURLConnection con后,con.method的默认值为"GET"。但是,当con.setRequestMethod被调用me时,它是在已经运行的vis实例化中创建的实例化,它的con.setRequestMethod("POST")没有反映在vis.me.con.method,而是vis.me.con.delegate.method中的一个级别。

答案 1 :(得分:0)

  

一旦调试通过con.setRequestMethod(方法),this.con.method仍然会说“GET”。

setRequestMethod调用返回之后,您才能期望该字段更改。听起来像调试器正常/正确地运行。

我也可能误解了你,并且你真的看到了该领域的陈旧价值。尝试让调试器从字段中重新获取值。


但这不应该影响代码实际行为的方式,无论是否从调试器运行代码。

最后,请注意您的代码实际上并未调用connect或尝试查看状态或内容,因此method字段的状态是学术性的。它不会被使用......