【问题标题】:call non-static methods without creating an object in the same class in Java [duplicate]调用非静态方法而不在Java中的同一类中创建对象[重复]
【发布时间】:2020-07-25 22:30:29
【问题描述】:

我明白,如果我需要在没有对象的类之外调用getItemList,我需要将方法设为公共和静态。我很困惑的是课堂上的情况。

在下面的代码中,我可以在不创建GitHubClient 对象的情况下调用getItemList 方法吗?如果我想直接调用getItemList方法,我应该把方法设为静态吗?

public class GitHubClient {
  private String s1 = "abc"

  public List<Item> search(double lat, double lon, String keyword) {
    // omit code using GitHub client to request info
    String responseBody = EntityUtils.toString(entity);
    JSONArray array = new JSONArray(responseBody);
    // can I call the method without an object
    return getItemList(array);
  }

  private List<Item> getItemList(JSONArray array) {
    // helper function to filter the search result
  }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    是的,如果您希望能够在不创建对象的情况下从GithubClient 外部调用getItemList(JSONArray),则必须同时设置publicstatic

    基本上,public static List&lt;Item&gt; getItemList(JSONArray array) {...}

    【讨论】:

    • 如果我想在GitHubClient类中调用getItemList,如果方法是非静态的,我需要创建一个对象吗?
    • 不,您也可以在此处将其称为GithubClient.getItemList(...)。在这种情况下,更喜欢静态调用而不是 getItemList(...)。 :-)
    • 非静态方法必须在对象的实例上调用。因为这就是他们的目的。方法分为两种,一种属于特定对象,一种不属于特定对象。后者称为“静态”。你要求的是静态行为,但不是静态的——这是矛盾的。
    猜你喜欢
    • 2018-12-19
    • 2021-09-25
    • 1970-01-01
    • 2011-01-03
    • 2013-11-20
    • 2015-04-28
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多