Я не могу получить доступ к статическому методу класса, который находится в том же пакете. Я получаю имя класса, отображаемое в автозаполнении, но метод не хочет работать.
Я уже безуспешно пробовал следующие функции 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»».
Также: пожалуйста, не начинайте имена классов Java со строчных букв. (Это заставит вас лучше пахнуть, привлекать друзей, чувствовать себя лучше, а также выигрывать в карты.)
Если вы сомневаетесь в Intellij (например, собираетесь «аннулировать кеши»), попробуйте выполнить сборку из командной строки, даже в командном окне внутри самого Intellij. Если код компилируется там, а не в Intellij, то может помочь «аннулирование кешей» и другие действия. Если там не компилируется, то проблема в коде.




Этот код недействителен для Java, вы не можете вызывать метод из тела класса, вызов метода должен быть частью какого-либо инициализатора (например, инициализатора статического поля или статического блока) или метода.
public class test {
csvReader.updateCSV(...);
}
Попробуйте public class test{ public void init() { csvReader.updateCSV(...); }
Это происходит, если вы слишком долго сидите перед ПК и концентрация сильно снижается. Такая банальность упускается из виду. Спасибо SeanF и @ash
импортировать de.elektriker_lifestyle.reducedcoffee.csvReader.java в тестовый класс над тестом общедоступного класса{}
Отсутствие импорта не является проблемой. И синтаксис импорта неверен.
Вам нужно вызвать статический метод csv Reader.update CSV со всеми необходимыми аргументами:
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);
}
}
Как указано в предыдущем ответе, вы не можете вызывать метод в теле класса, все выполнения метода должны быть внутри другого метода, который распространяется до основного метода.
Также в вызове, который вы делаете, отсутствуют некоторые параметры объявления вашего метода.
Наконец, если вы хотите, чтобы ваш статический метод всегда выполнялся в вашем классе, вы должны сделать это в конструкторе класса:
public class test {
public test () {
csvReader.updateCSV(...);
}
}
` Таким образом, каждый раз, когда создается тестовый объект, ваш статический метод будет выполняться.
csvReader.updateCSV(...);должен быть внутри какого-то метода