Passar valores de atributos de um objeto para uma outra classe/objeto

Pessoal, boa noite!
Estou quebrando a cabeça por aqui tentando passar os valores de dois atributos para uma classe/objeto distinto.

Um exemplo:
Classe Usuario fiz os getters/settes de perfil e logado.
Na classe usuário ao validar os dados de autenticação é setado os atributos perfil = 1 e logado = true;
Queria recuperar esses valores na minha main.
Acontece que se eu instanciar esse objeto/classe Usuario em uma outra classe ele vai criar um novo objeto perdendo assim os seus devidos valores.

Você não instancia um objeto, você instancia uma classe.
Um objeto é uma instância de uma classe.

Você não tem que instanciar outro usuário em outra classe, você tem que passar o usuário, que você já instanciou, para a classe que depende dele.

Oi, boa noite!
Pode me dar um exemplo de como posso fazer isso? Obrigado.

Posta os fontes das suas classes, que fica mais fácil.
Não esqueça de usar o botão de formatção de código do fórum: “</>

Acabei dando uma bagunçada porque tentei recuperar os valores via banco de dados, porém não saiu como eu realmente queria.

UsuarioDAO.class

package br.com.icebelle.models;

import br.com.icebelle.views.Home;
import br.com.icebelle.views.Messages;
import java.sql.*;

public class UsuarioDAO {
    private Connection connection;
    private final Messages messages = new Messages();
    private final MenuDAO menuDAO = new MenuDAO();

    public UsuarioDAO() {
        try {
            String url = "jdbc:mysql://localhost:3306/icebelle_homolog_v2";
            String user = "root";
            String senha = null;

            connection = DriverManager.getConnection(url, user, senha);

            } catch (SQLException sqlException) {
                sqlException.printStackTrace();
        }
    }

    public void adicionarUsuarioDAO(Usuario usuario) {
        String sql = "insert into users(id, perfil, login, senha) values(?, ?, ?, ?)";

        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, usuario.getId());
            preparedStatement.setInt(2, usuario.getPerfil());
            preparedStatement.setString(3, usuario.getUsuario());
            preparedStatement.setString(4, usuario.getSenha());
            preparedStatement.executeUpdate();
            messages.setSuccess("\n" + usuario.getUsuario() + " cadastrado com sucesso.\n");
            preparedStatement.close();
            connection.close();
        } catch (SQLException sqlException) {
            messages.setFail("\nFalha: " + sqlException.getMessage() + ", tente novamente.\n\n");
        }
    }

    public void loginDAO(String login, String senha) {
        String sql = "select perfil, login, senha from users where login = ? and senha = ?";
        String sqlUpdate = "update users set logado = ? where login = ?";

        try{
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            PreparedStatement preparedStatementUpdate = connection.prepareStatement(sqlUpdate);
            preparedStatement.setString(1, login);
            preparedStatement.setString(2, senha);
            ResultSet resultSet = preparedStatement.executeQuery();
            resultSet.next();
            int perfil = resultSet.getInt("perfil");
            login = resultSet.getString("login");
            senha = resultSet.getString("senha");

            preparedStatementUpdate.setInt(1, 1);
            preparedStatementUpdate.setString(2, login);
            preparedStatementUpdate.executeUpdate();
            preparedStatementUpdate.close();
            connection.close();

            if(perfil == 1 && login.equals(login) && senha.equals(senha)){
                messages.setSuccess(login + " (administrador) logado com sucesso.\n\n");
                menuDAO.menuAdminDAO();
            } else if(perfil == 0 && login.equals(login) && senha.equals(senha)){
                messages.setSuccess(login + " (cliente) logado com sucesso.\n\n");
                menuDAO.menuUserDAO();
            } else if (perfil == 3 && login.equals(login) && senha.equals(senha)){
                messages.setSuccess(login + "(outro) logado com sucesso.\n\n");
            } else {
                messages.setFail("Falha ao logar-se\n");
            }
        } catch(SQLException sqlException) {
            messages.setFail("Falha ao logar-se\n");
            Home.main(null);
        }
    }
}

Home.class

package br.com.icebelle.views;
import br.com.icebelle.models.MenuDAO;

import java.sql.*;

public class Home {

    private static int perfil;
    private static boolean logado;

    private final static MenuDAO menuDAO = new MenuDAO();
    private final static UsuarioView usuarioView = new UsuarioView();
    private static Connection connection;

    public static void main(String[] args) {
        try {
            String url = "jdbc:mysql://localhost:3306/icebelle_homolog_v2";
            String user = "root";
            String senha = null;

            connection = DriverManager.getConnection(url, user, senha);

        } catch (SQLException sqlException) {
            sqlException.printStackTrace();
        }

        try {
            String sql = "select perfil, logado from users where login = ?";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            preparedStatement.setString(1, usuarioView.valorUsuario);
            ResultSet resultSet = preparedStatement.executeQuery();
            resultSet.next();

            perfil = resultSet.getInt("perfil");
            logado = resultSet.getBoolean("logado");

            preparedStatement.close();
            resultSet.close();
            connection.close();
        } catch(SQLException sqlException) {
            sqlException.printStackTrace();
        }

        if(logado == true && perfil == 1) {
            menuDAO.menuAdminDAO();
        } else if(logado == true && perfil == 0) {
            menuDAO.menuUserDAO();
        } else if(logado == true && perfil == 3) {
            // Chamar menu outro perfil
        } else if(logado == false && perfil < 0) {
            usuarioView.logarUsuario();
        } else if(logado == false && perfil > 0) {
            usuarioView.logarUsuario();
        }
    }
}

A ideia seria basicamente criar/pegar uma sessão para aquele usuário logado.
Pegaria os dados de login, perfil e status de logado do usuário autenticado.
E toda vez que chamasse minha main iria verificar se o usuário já estaria com a autenticação feita, sendo assim se esse retorno fosse positivo já iria carregar o menu para ele.
Caso contrario iria solicitar o login/senha novamente.

O método main é o ponto de entrada, você só vai chamar ele uma vez, para inicializar sua aplicação.

Ciente, e sobre o valor que eu estou tentando retornar em outra classe, será que seria possível?

Sim, com passagem de parâmetros, mas não vi em nenhum lugar do seu código você criar um objeto da classe Usuario.

Olá boa noite, pelo pouco que entendo acredito você pode criar uma classe singleton para gerenciar o estado de autenticação do usuário. Isso vai permitir que o senhor consiga armazenar as informações do usuário autenticado em um único local e consiga acessar os dados de qualquer classe sem perder o estado.

Muito obrigado meu amigo, irei estudar mais sobre esse conceito.

1 curtida