【问题标题】:Error: Can't find symbol from a class in the same package错误:无法从同一包中的类中找到符号
【发布时间】:2021-12-04 02:45:44
【问题描述】:

我正在尝试在 App 类中调用 Usuario 类。它们在同一个包,同一个文件夹中,但是java编译器仍然找不到类。

** 我已经从 github 的存储库中克隆了代码(不知道这是否有什么不同)。

package code;
import java.util.*;
/**
 * App
 */
public class App {

    public static void main(String[] args) {
        
        // abre  o scanner
        Scanner teclado = new Scanner(System.in);

        //inicializa alguns usuarios e departamentos
        Usuario user1 = new Usuario("123", "joao", 1);
        

        
        //variaveis do usuario logado
        String id = null;
        String nome;
        int tipo;
        String cargo;
        
        //variavel do fim do programa
        boolean fim_do_programa = false;
        
        System.out.println("Sistema de Controle de Aquisicoes\n");
        

        while(!fim_do_programa){
            

            if(id == null){
                // primeiro acesso deve requerir o login
            }
            
            //  input do usuario
            System.out.print("Digite o a função desejada: ");
            int inputUsuario = teclado.nextInt();

            
            
            switch(inputUsuario){
                case 1 :// Mudar o usuario atual; 
                break;

                case 0 : System.out.println("Fechando o programa...");fim_do_programa = true; break;          
            }
        }

    }
    
}

本例中的另一个类是“Usuario”

package code;
import java.util.*;
public class Usuario {

    private String id;
    private Departamento departamento;
    private String nome;
    private static int countUser = 0;
    private int tipo;
    private String cargo;
    
    public Usuario(String codigo, String nome, int tipo) {
        this.id = codigo;
        this.nome = nome;
        if (tipo == 1 || tipo == 2) {
            this.tipo = tipo;
        } else {
            System.out.println("ERRO AO CRIAR USUÁRIO " + this.nome + ". Usuário não será criado.\n");
            this.tipo = 0;
        }
        countUser++;
    }

    public String getId() {
        return id;
    }

    public static int getCountUser() {
        return countUser;
    }

    public String getNome() {
        return nome;
    }

    public int getTipo() {
        return tipo;
    }

    public String getCargo() {
        if (this.tipo == 1) {
            this.cargo = "funcionário";
            return this.cargo;
        } else if (this.tipo == 2) {
            this.cargo = "administrador";
            return this.cargo;
        } else {
            this.cargo = null;
            return this.cargo;
        }
    }

    @Override
    public String toString() {
        return "Usuario [cargo=" + cargo + ", departamento=" + departamento.getDepartamento() + ", id=" + id + ", nome="
                + nome + "]";
    }

}

当我尝试编译代码时,这个错误一直显示

PS C:\Users\thoma\OneDrive\Área de Trabalho\TrabalhoG\trabalhoGCS-PUCRS\code> javac App.java
App.java:14: error: cannot find symbol
        Usuario user1 = new Usuario("123", "joao", 1);
        ^
  symbol:   class Usuario
  location: class App
App.java:14: error: cannot find symbol
        Usuario user1 = new Usuario("123", "joao", 1);
                            ^
  symbol:   class Usuario
  location: class App
2 errors

【问题讨论】:

    标签: java class package


    【解决方案1】:

    我认为你只是编译不正确。

    1. 确保App.javaUsuario.javaDepartamento.java 都在名为code 的目录中。这是包的名称。

    2. 将目录更改为code 目录上方的目录

    3. 编译如下:

        javac -cp . code/App.java
      

    如果类路径/源路径正确,那么 Java 编译器将为您正在编译的类(例如code/App.java)所依赖的任何类找到以前编译的类和源文件。如果找到源版本和编译 (.class) 版本,则使用较新的版本。这意味着重新编译更新的源文件。所以......在你的例子中...... code/Usario.javacode/Departamento.java 应该被编译或重新编译。

    有关更多信息,请阅读javacjava 命令的文档。请特别注意类路径和源路径的描述以及javac 文档中关于“搜索类型”的部分。


    话虽如此,对于比这更复杂的事情,您应该毕业使用 Java 构建工具,例如 Maven、Gradle 或 Ant。

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多