在你投票之前,因为你认为这是“对非静态......进行静态引用”的另一个副本,请阅读整个问题。
我正在编写一个基本上通过目录并提取所有.txt
文件的程序。事实上,我实际上使用过this
SO线程帮助我。我的代码一直在工作,除了线程中没有涉及的一件事。将收集的一些信息添加到HashMap
。在我的程序中,我使用HashMap
将名称作为键存储,并将文件对象存储为值。
哈希映射如下:
private HashMap<String, Essay> locations;
此哈希映射表示每个文件的位置,以及对象“Essays”,其中包含有关该文件的更多信息。
我的main方法包含查看文件是否为txt的逻辑,如果是,则将其添加到HashMap
位置。
public void indexEachFile(){
for (File file : directory.listFiles()){
if (file.getName().endsWith(".txt") && file.isFile()){
//If it is a txt
locations.put(File.getName(), new Essay()); //Bad line of code
}
}
}
将名称和新对象添加到哈希映射的行会引发错误:
无法对非静态方法getName()进行静态引用 类型文件
我完全理解该函数是非静态的。
我不明白为什么getName()
的引用是静态的。有没有更好的方法来实现对HashMap的添加不会引发错误?
编辑:现在我意识到我的问题源于一个小错误,这改变了我想要做的事情。
答案 0 :(得分:3)
你需要更改&#39; F&#39;这是因为你没有在循环迭代中引用文件对象。而是使用File
类,将其转换为静态调用。
locations.put(File.getName(), new Essay()); //Bad line of code
像这样改变:
locations.put(file.getName(), new Essay()); //should be a good line of code now