【问题标题】:Access to method of another class in the same package is not possible无法访问同一包中另一个类的方法
【发布时间】:2019-04-15 20:28:36
【问题描述】:

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

我已经尝试过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();
    }



}

这里我要使用的方法:

package de.elektriker_lifestyle.reducedcoffee;
public class test {
    csvReader.updateCSV(...);
}

截图:

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

【问题讨论】:

  • csvReader.updateCSV(...); 应该在某个方法中
  • 另外:请不要以小写字母开头 Java 类名。 (这会让你闻起来更香,更能吸引朋友,感觉更好,还能赢牌。)
  • 如果对 Intellij 有疑问(例如,选择“无效缓存”),请尝试从命令行构建,即使在 Intellij 本身的命令窗口中也是如此。如果代码在那里编译而不是在 Intellij 中编译,那么“使缓存无效”和其他努力可能会有所帮助。如果它没有在那里编译,那么问题出在代码上。

标签: java maven intellij-idea


【解决方案1】:

此代码不是有效的 Java,您不能从类的主体调用方法,方法调用必须是某种初始化程序(例如静态字段初始化程序或静态块)或方法的一部分。

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

【讨论】:

  • 试试public class test{ public void init() { csvReader.updateCSV(...); }
  • 如果您在 PC 前坐的时间过长,注意力会急剧下降,就会发生这种情况。这种平庸被忽视了。感谢 SeanF 和 @ash
【解决方案2】:

您需要使用所有必需的参数调用静态方法 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);

    }

}

【讨论】:

    【解决方案3】:

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

    您正在进行的调用也缺少方法声明的一些参数。

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

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

    ` 这样,每次创建测试对象时,您的静态方法都会被执行。

    【讨论】:

      【解决方案4】:

      在公共类test上面的test类中导入de.elektriker_lifestyle.reducedcoffee.csvReader.java{}

      【讨论】:

      • 缺少导入不是问题。而且导入语法不正确。
      猜你喜欢
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2015-09-16
      相关资源
      最近更新 更多