0
votes

L'accès à la méthode d'une autre classe dans le même package n'est pas possible

Je ne peux pas accéder à la méthode statique d'une classe qui se trouve dans le même package. J'obtiens le nom de la classe affiché dans l'auto-complétion, mais la méthode ne veut pas fonctionner.

J'ai déjà essayé la fonctionnalité suivante d'intellij sans succès.

"File"> "Invalidate Caches / Restart"> "Invalidate and Restart"

Méthode: p >

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

Ici, je veux utiliser la méthode:

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();
    }



}

Captures d'écran :

L'erreur suivante apparaît "Impossible de résoudre le symbole 'updateCSV'".


3 commentaires

csvReader.updateCSV (...); devrait être dans une méthode


Aussi: veuillez ne pas démarrer les noms de classes Java avec des lettres minuscules. (Cela vous fera sentir plus agréable, attirer vos amis, vous sentir mieux et également gagner aux cartes.)


En cas de doute sur Intellij (par exemple, pour "invalider les caches"), essayez de construire à partir de la ligne de commande, même dans la fenêtre de commande dans Intellij lui-même. Si le code se compile là-bas et pas dans Intellij, alors «invalider les caches» et d'autres efforts peuvent aider. S'il ne compile pas là, le problème vient du code.


4 Réponses :


1
votes

Ce code n'est pas valide Java, vous ne pouvez pas appeler une méthode à partir du corps d'une classe, un appel de méthode doit faire partie d'une sorte d'initialisateur (tel qu'un initialisateur de champ statique ou un bloc statique) ou une méthode. < Pré> xxx


2 commentaires

Essayez test de classe publique {public void init () {csvReader.updateCSV (...); }


Cela se produit si vous restez assis trop longtemps devant le PC et que la concentration diminue fortement. Une telle banalité est négligée. Merci à SeanF et @ash



-2
votes

importer de.elektriker_lifestyle.reducedcoffee.csvReader.java dans la classe de test au-dessus du test de classe publique {}


1 commentaires

L'importation manquante n'est pas le problème. Et la syntaxe d'importation n'est pas correcte.



0
votes

Vous devez appeler la méthode statique csvReader.updateCSV avec tous les arguments requis:

csvReader.updateCSV ("1", "2", "3", 4, 5); code >

Utilisez le code ci-dessous comme guide:

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);

    }

}


0 commentaires

0
votes

Comme l'indique la réponse précédente, vous ne pouvez pas appeler la méthode dans le corps d'une classe, toutes les exécutions de méthode doivent être à l'intérieur d'une autre méthode propagée jusqu'à la méthode main.

De plus, l'appel que vous faites manque certains paramètres de votre déclaration de méthode.

En dernier lieu, si vous voulez que votre méthode statique soit toujours exécutée sur votre classe, vous devez le faire sur le constructeur de classe:

public class test {

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

` De cette façon, chaque fois qu'un objet de test est créé, votre méthode statique sera exécutée.


0 commentaires