Java 无法访问同一包中另一个类的方法

Java 无法访问同一包中另一个类的方法,java,maven,intellij-idea,Java,Maven,Intellij Idea,我无法访问同一个包中的类的静态方法。我得到了自动完成中显示的类名,但该方法不想工作 我已经尝试了intellij的以下功能,但没有成功 “文件”>“使缓存无效/重新启动”>“使缓存无效并重新启动” 方法: package de.elektriker_lifestyle.reducedcoffee; import java.util.List; import java.io.FileReader; import java.io.FileWriter; import java.io.IOExcep

我无法访问同一个包中的类的静态方法。我得到了自动完成中显示的类名,但该方法不想工作

我已经尝试了intellij的以下功能,但没有成功

“文件”>“使缓存无效/重新启动”>“使缓存无效并重新启动”

方法:

package de.elektriker_lifestyle.reducedcoffee;

import java.util.List;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import com.opencsv.*;

public class csvReader {

    private static final char SEPARATOR = ',';

    public static void updateCSV(String input, String output, String  replace, int row, int col) throws IOException {

        CSVReader reader = new CSVReader(new FileReader(input),SEPARATOR);
        List<String[]> csvBody = reader.readAll();
        csvBody.get(row)[col]=replace;
        reader.close();

        CSVWriter writer = new CSVWriter(new FileWriter(output),SEPARATOR,' ');
        writer.writeAll(csvBody);
        writer.flush();
        writer.close();
    }



}
截图:


出现以下错误“无法解析符号'updateCSV'”。

此代码不是有效的Java代码,无法从类体调用方法,方法调用必须是某种初始值设定项(如静态字段初始值设定项或静态块)或方法的一部分

public class test {
    csvReader.updateCSV(...);
}

在公共类test{}上方的测试类中导入de.elektriker_lively.reducedcoffee.csvReader.java

您需要使用所有必需参数调用静态方法csvReader.updateCSV:

csvReader.updateCSV(“1”、“2”、“3”、4、5)

使用以下代码作为指南:

import java.util.List;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;

public class csvReader {

    private static final char SEPARATOR = ',';

    public static void updateCSV(String input, String output, String  replace, int row, int col) throws IOException {

        CSVReader reader = new CSVReader(new FileReader(input),SEPARATOR);
        List<String[]> csvBody = reader.readAll();
        csvBody.get(row)[col]=replace;
        reader.close();

        CSVWriter writer = new CSVWriter(new FileWriter(output),SEPARATOR,' ');
        writer.writeAll(csvBody);
        writer.flush();
        writer.close();
    }

    public static void main(String[] args) throws IOException {
            csvReader.updateCSV("1", "2", "3", 4, 5);

    }

}
import java.util.List;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入au.com.bytecode.opencsv.CSVReader;
导入au.com.bytecode.opencsv.CSVWriter;
公共类csvReader{
私有静态最终字符分隔符=',';
公共静态void updateCSV(字符串输入、字符串输出、字符串替换、int行、int列)引发IOException{
CSVReader reader=新CSVReader(新文件读取器(输入),分隔符);
List csvBody=reader.readAll();
csvBody.get(row)[col]=替换;
reader.close();
CSVWriter writer=新的CSVWriter(新的文件写入程序(输出),分隔符“”);
书面作者(csvBody);
writer.flush();
writer.close();
}
公共静态void main(字符串[]args)引发IOException{
csvReader.updateCSV(“1”、“2”、“3”、4、5);
}
}

正如前面的回答所述,您不能在类的主体中调用该方法,所有方法的执行都应该在另一个方法中,该方法一直传播到主方法

另外,您正在执行的调用缺少方法声明的一些参数

最后,如果希望静态方法始终在类上执行,则应在类构造函数上执行:

public class test {

   public test () {
    csvReader.updateCSV(...);
   }
}
`
这样,每次创建测试对象时,都会执行静态方法。

csvReader.updateCSV(…)
应该在一些方法中:请不要以小写字母开始Java类名。(这会让你闻起来更香,吸引伴侣,感觉更好,还可以赢得纸牌。)如果对Intellij有疑问(例如,选择“无效缓存”),尝试从命令行构建,即使是在Intellij本身的命令窗口中。如果代码在那里编译,而不是在Intellij中编译,那么“使缓存无效”和其他工作可能会有所帮助。如果它没有在那里编译,那么问题在于代码。缺少导入不是问题。导入语法不正确。请尝试
公共类测试{public void init(){csvReader.updateCSV(…);}
如果你在电脑前坐得太久,浓度会明显降低,则会发生这种情况。这种平庸性会被忽略。多亏了SeanF和@ash
public class test {

   public test () {
    csvReader.updateCSV(...);
   }
}