Estou tendo um problema com meu método em java

Eu tenho uma função em java que dentro dela tem um System.out.print(Texto), e eu gostaria de fazer essa função imprimir qualquer tipo de variável no console, mas eu só consigo fazer imprimir Strings, alguma ideia de como fazer imprimir qualquer tipo de variável?
segue o código abaixo:

    public static void main(String[] args) {
    		escreva("oi");//Isso não provoca erros no codigo
    		escreva(1);//Isso provoca erros no codigo
    	
    }
    public static void escreva(String Texo){
    	System.out.print(Texo);
    }

A função escreva recebe uma String, por isso essa chamada escreva("oi"); funciona, porém, na chamada escreva(1); você está passando um int, que não é compatível com o tipo String, por isso está dando erro.

Sim, mas você sabe alguma forma de fazer com que essa função receba qualquer tipo?

Você pode fazer assim:

public static void escreva(Object texto) {
    System.out.println(texto);
}

Mas isso não é recomendado, pois vc teria que tratar cada tipo (usando IFs, switches, etc.). Mas vai depender muito também de que ação o método irá executar. Se for apenas imprimir no console (como vc está fazendo), não teria tanto problema usar Object, mas se tiver alguma lógica mais elaborada, não recomendo essa ideia.

1 curtida

Muito Obrigado de verdade, me ajudou muito, vou pesquisar mais a respeito (Sou novo em java).

O exemplo do @Lucas_Camara é muito bom, a única observação é que vc não precisa criar sequencias de ifs ou switches para imprimir diferentes tipos de objetos.

Isso porque os métodos print e println já tem uma forma padrão de transformar qualquer objeto em String que é invocando, por debaixo dos panos, o método toString() que todo objeto possui.

Uma outra possibilidade é usar Generics assim:

import java.util.List;

class Main {
  public static <T> void escreva(T objeto) {
    System.out.print(objeto);
  }

  public static void main(String[] args) {
    escreva("Olá");
    
    escreva(List.of(1, 2, 3));
    
    escreva(new Object() {
      @Override
      public String toString() {
        return "Eu sou uma classe anônima";
      }
    });
  }
}

Viu como eu pedi pra imprimir uma String, uma List e um outro objeto qualquer? Com a versão do Lucas também é possivel fazer isso.

Aproveitando só pra te corrigir em uma coisa:

No Java não temos funções e sim métodos.

No meu entendimento eles são parecidos, são blocos de códigos que vc pode invocar, mas sinceramente não sei se há diferenças tecnicas ou filosóficas entre elas.

Já vi gente dizer que funções são como em C em elas são declaras independentes e métodos são membros de uma classe como no Java. Só que em C++ não chamamos de métodos e sim de funções membros.

Enfim, em Java temos métodos e isso é importante para que possamos nos comunicar de forma mais efetiva.

1 curtida

Olha muito obrigado, vou tentar entender melhor os métodos em java :sweat_smile:

1 curtida