【问题标题】:Using/getting variables out of a method in Java在 Java 中使用/从方法中获取变量
【发布时间】:2016-04-15 21:21:08
【问题描述】:

不幸的是,我的 Java 知识有些欠缺,所以这有点像初学者的问题,但我似乎无法弄清楚如何做到这一点。

基本上我有一个创建和填充ArrayList 的方法。所说的填充列表是我想在不同的方法和可能的另一个类中使用的东西。我认为这是一个类级别的变量,我想将其保存为,但我不确定如何执行此操作。下面的代码会更清楚。

public class JenAcc {

private final String endpointUrl = "http://a-url/";  

private String uri = "api/json";

public static void main(String[] args) {

    JenAcc obj = new JenAcc();
    obj.jsonRun();

}

public void jsonRun() {

    ArrayList<String> abbrevList = new ArrayList<>();
    ArrayList<String> urlList = new ArrayList<>();

    try {
        RestServiceClient client = RestServiceClient.getClient(endpointUrl);
        Response response = client
                .path(uri)
                .accept(MediaType.APPLICATION_JSON)
                .get();

        String s = (String) response.getEntity();

        JobList jjj = JSONResponseHandler.mapJSONToResponse(s, JobList.class);

        for (int i = 0; i < jjj.getJobs().size(); i++) {
            if (jjj.getJobs().get(i).getName().contains("services"){
                abbrevList.add(jjj.getJobs().get(i).getName().replace("services", ""));
                urlList.add(jjj.getJobs().get(i).getUrl());

            } else i++;
        }

        System.out.println(abbrevList);
        System.out.println(urlList);

    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

所以本质上我希望有一种方法可以在该方法之外,在另一个方法或类中使用该列表。我该怎么做呢?

感谢您的耐心等待。

【问题讨论】:

    标签: java arraylist methods


    【解决方案1】:

    将列表声明为成员变量, & 定义访问器方法以从类外部访问它们:

    public class JenAcc {
        private List<String> abbrevList = new ArrayList<>();
        private List<String> urlList = new ArrayList<>();
    
        ...
    
        public List<String> getAbbrevList() {
            return abbrevList;
        }
    
        public List<String> geturlList() {
            return urlList;
        }
    }
    

    & 从类外访问列表:

    JenAcc jenacc = new JenAcc(); // initialization
    List<String> urls = jenacc.geturlList(); // Use the accessor method defined above
    // Same goes for the other list
    

    【讨论】:

    • 感谢您的回复。我对此只有一个问题。如何使jsonRun() 中的列表将添加的内容存储到声明的列表中。就目前而言,该方法与它们没有关联。
    • 这些只是访问器,它们不应该以任何方式链接到jsonRun()
    • 我明白了。你知道我应该采取一种标准方法来让方法检索它还是应该以其他方式返回列表以访问我想要添加到其中的字符串
    • jsonRun() 方法将修改数组列表的内容。你不需要返回任何东西。使用访问器方法(如上定义),您可以随时从任何JenAcc 实例访问数组列表。
    • 为多个问题道歉,只是试图让我了解整个概念。我将 getter 理解为访问器,但我仍然不确定如何首先填充数组列表。
    【解决方案2】:

    如果它应该是类级别成员,那么只需在声明其他类级别成员的地方声明它:

    private final String endpointUrl = "http://a-url/";  
    private String uri = "api/json";
    
    ArrayList<String> abbrevList = new ArrayList<>();
    ArrayList<String> urlList = new ArrayList<>();
    

    (当然还要从方法中删除局部声明。)当然,这会影响这些值的范围。在对象的任何给定实例上多次运行该方法可能会产生意想不到的副作用,但这实际上取决于您需要对这些值执行的任何操作的逻辑。

    此时对象中的任何其他代码都可以访问这些值。如果它们也需要被其他对象访问,请添加一个 getter:

    public ArrayList<String> getAbbrevList() {
        return this.abbrevList;
    }
    

    当然还有其他方法,这完全取决于您的 object 应该如何表现,而不是 method 应该如何表现。例如,也许它不应该是类级别的成员,而应该由方法返回?这是您正在构建的系统的语义问题。而像“JenAcc”和“jsonRun”这样的名字并不能真正传达这些语义。

    【讨论】:

    • 感谢您的回复。你最后说的话是对的。可能我应该返回ArrayList,但我需要围绕它做一些研究。唉,我还有很多东西要学!
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2011-12-09
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多