Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

269
Visualizações
Cannot overload method?

I have two methods that do a very similar thing: receives a map and then print it to an output file, except that they receives different data type of the map and Java (IntelliJ, in fact) is not allowing me to overload it and says 'parse(Map<String, Long>)' clashes with 'parse(Map<Set<String>, Integer>)'; both methods have same erasure.

Method A:

private static void parse(Map<String, Long> map) {

        PrintWriter output = null;
        try {
            output = new PrintWriter("output1.csv");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        assert output != null;
        map.entrySet().forEach(output::println);
        output.close();
    }

Method B:

    private static void parse(Map<Set<String>, Integer> map) {

        PrintWriter output = null;
        try {
            output = new PrintWriter("output2.csv");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        assert output != null;
        map.entrySet().forEach(output::println);
        output.close();
    }

I could always make them two different methods with different names but that would make my code looks unnecessary long and wonky, so I am trying to avoid it.

What am I doing wrong here? Please enlighten me.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

that is because of type erasure thingy in java. basically, after compilation, your code will look like this

private static void parse(Map map) {
}

private static void parse(Map map) {
}

looking at the code. why not just make the method signature like this ?

private static void parse(Map<?, ?> map, String fileName) {
}

that way, you would also avoid unnecessary overload.

over 4 years ago · Santiago Trujillo Relatório

0

You can Overload a method with DIFFERENT parameters, different number of parameters of different type of parameters. In your example code, Java will view both methods as the same as they have the same input parameter, which is Map, you can add another parameter in one of these methods to make them work.

over 4 years ago · Santiago Trujillo Relatório

0

Yes, you can. They are all the same, also, the single Statement where you use the parameter is map.entrySet() which is https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#entrySet--

So you just have to use the Interface Map<V,K>, here is an example of how to implement generis on Map Generic Map Parameter java

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda