java - 私有(private)数据成员在某处神秘地改变(变空)

标签 java private member

我有一个名为“InvertedIndex”的公共(public)类,它有两个私有(private)数据成员:

private HashMap<String, ArrayList<Integer>> invertedList;
private ArrayList<String> documents;

我已经为它们生成了 getter 和 setter 函数。我有一个名为“buildFromTextFile”的函数,它填充两个数据成员,我还有另一个名为“processQuery”的函数。我在“InvertedIndexTest”类中为processQuery编写了一个测试单元,如下所示:

@Test
public void testProcessQuery() throws IOException{
    InvertedIndex invertedIndex = new InvertedIndex();
    String query = "ryerson award";
    ArrayList<String> expectedResult = new ArrayList<String>();
    expectedResult.add("ryerson award ??..23847");
    invertedIndex.buildFromTextFile("input.tsv");
    ArrayList<String> result = processQuery(query, 5);
    Assert.assertEquals(expectedResult, result);        
}

在此函数中,在 Debug模式下,当调用函数“buildFromTextFile”时,代码将转到类“InvertedIndex”并填充数据成员,因此,在此函数结束时,数据成员中包含正确的数据。当运行再次回到这个单元测试函数时,如果我观看 invertedIndex.getInvertedList().ToString(),我可以看到数据仍然是正确的。然后调用函数processQuery,当运行到“InvertedIndex”类时,在这个函数内部,invertedList().ToString() 为空。似乎所有数据都丢失在某个地方,但我不知道在哪里。我将非常感谢您的帮助。

这是 processQuery 方法:

public ArrayList<String> processQuery(String query, int k){
    ArrayList<String> result = new ArrayList<String>();
    ArrayList<Integer> resultIds;
    String[] queryWords = query.split("\\W+");
    ArrayList<Integer> list1;
    resultIds = invertedList.get(queryWords[0]);
    for (int i = 1; i < queryWords.length; i++) {       
        list1 = invertedList.get(queryWords[i]);
        resultIds = intersect(list1, resultIds);
    }

    Collections.sort(resultIds);
    for (Integer item : resultIds) {
        result.add(documents.get(item));
    }
    return result;
}

当此行运行时,resultIds 为空:

resultIds = invertedList.get(queryWords[0]);

我在queryProcess函数的第一行放置了一个断点,两个数据成员都是空的。

最佳答案

我明白了,您的 invertedList 还有更多问题。 :-)

这实际上是由您之前遇到的完全相同的问题引起的: Hashmap get function returns null

ArrayList<String> result = processQuery(query, 5);

应该阅读

ArrayList<String> result = invertedIndex.processQuery(query, 5);

建议将所有测试移至完全独立的文件中。这将为您省去这些令人头疼的现场引用问题。

关于java - 私有(private)数据成员在某处神秘地改变(变空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492214/

相关文章:

java - 我如何将 css 放在 spring 元素的 Hibernate validator 注释消息的消息上

android - 在 Android 中使用私有(private)类

java - 2 个 Java 类中的公共(public)私有(private)变量连接问题

c++ - 调用C++成员函数指针: this-pointer gets corrupted

java - Eclipse 无法编译,错误的类文件,错误的版本

java - 如何从 Java 使用 scalaz.Reader

JAVA - 在表单的文本字段中显示数据

Java 重写私有(private)函数不显示多态行为

c - 具有单个成员的结构是否具有与成员类型相同的性能?

具有在初始化时定义的不同行为的 C++ 成员函数