Pergunta

Por que o tipo de retorno de um método não é considerado na sobrecarga do método? Alguém pode explicar como o compilador verifica os métodos sobrecarregados?

Foi útil?

Solução

Por que o tipo de retorno de um método não é considerado na sobrecarga do método?

A principal razão é que se você fez Considere isso, muitas chamadas de função se tornam ambíguas se o valor de retorno não for atribuído a algo. Por exemplo, qual chamada de função está sendo invocada aqui?

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

Existem outras razões para não querer fazer isso também. Dito isto, muitas línguas Faz Permita que suas assinaturas sejam diferentes apenas no tipo de retorno; Haskell e Perl são dois exemplos. Se o seu idioma permitir isso, não é difícil ver que tudo o que você precisa para suportar isso é mais uma etapa no seu processo de resolução de métodos: basta ter uma maneira óbvia para o compilador selecionar um método ou outro. No exemplo acima, talvez definiríamos uma prioridade (talvez o primeiro método definido seja o que vence, por exemplo, então nosso x() A chamada invocaria String x()).

Outra coisa a observar é que a JVM faz Permita dois métodos cuja assinatura difere apenas no tipo de retorno a existir. (É assim que o Scala e outros idiomas da JVM que apóiam isso o fazem.

Outras dicas

Alguém pode explicar como o compilador verifica os métodos sobrecarregados?

A especificação da linguagem Java, Seção 8.4.9, conterá a resposta definitiva (mas muito técnica):http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.9

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top