Доступ к методу другого класса в том же пакете невозможен

Я не могу получить доступ к статическому методу класса, который находится в том же пакете. Я получаю имя класса, отображаемое в автозаполнении, но метод не хочет работать.

Я уже безуспешно пробовал следующие функции 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(...); должен быть внутри какого-то метода
Ruslan 15.04.2019 22:30

Также: пожалуйста, не начинайте имена классов Java со строчных букв. (Это заставит вас лучше пахнуть, привлекать друзей, чувствовать себя лучше, а также выигрывать в карты.)

BadZen 15.04.2019 22:33

Если вы сомневаетесь в Intellij (например, собираетесь «аннулировать кеши»), попробуйте выполнить сборку из командной строки, даже в командном окне внутри самого Intellij. Если код компилируется там, а не в Intellij, то может помочь «аннулирование кешей» и другие действия. Если там не компилируется, то проблема в коде.

ash 15.04.2019 22:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
142
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Этот код недействителен для Java, вы не можете вызывать метод из тела класса, вызов метода должен быть частью какого-либо инициализатора (например, инициализатора статического поля или статического блока) или метода.

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

Попробуйте public class test{ public void init() { csvReader.updateCSV(...); }

ash 15.04.2019 23:46

Это происходит, если вы слишком долго сидите перед ПК и концентрация сильно снижается. Такая банальность упускается из виду. Спасибо SeanF и @ash

ElektrikerLifestyle 16.04.2019 12:25

импортировать de.elektriker_lifestyle.reducedcoffee.csvReader.java в тестовый класс над тестом общедоступного класса{}

Отсутствие импорта не является проблемой. И синтаксис импорта неверен.

ash 15.04.2019 22:35

Вам нужно вызвать статический метод 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(...);
   }
}

` Таким образом, каждый раз, когда создается тестовый объект, ваш статический метод будет выполняться.

Другие вопросы по теме