Como uso parâmetros opcionais em Java? Que especificação suporta parâmetros opcionais?
java
optional-parameters
Mike Pone
fonte
fonte
Existem várias maneiras de simular parâmetros opcionais em Java:
Sobrecarga de método.
Uma das limitações dessa abordagem é que ela não funcionará se você tiver dois parâmetros opcionais do mesmo tipo e qualquer um deles puder ser omitido.
Varargs.
a) Todos os parâmetros opcionais são do mesmo tipo:
b) Os tipos de parâmetros opcionais podem ser diferentes:
A principal desvantagem dessa abordagem é que, se os parâmetros opcionais forem de tipos diferentes, você perderá a verificação de tipo estático. Além disso, se cada parâmetro tiver um significado diferente, você precisará de alguma maneira de distingui-lo.
Nulos. Para abordar as limitações das abordagens anteriores, você pode permitir valores nulos e analisar cada parâmetro em um corpo de método:
Agora todos os valores dos argumentos devem ser fornecidos, mas os padrão podem ser nulos.
Classe opcional. Essa abordagem é semelhante a nulos, mas usa a classe Java 8 Optional para parâmetros que possuem um valor padrão:
Opcional torna um contrato de método explícito para um chamador, no entanto, pode-se achar essa assinatura muito detalhada.
Atualização: o Java 8 inclui a classe
java.util.Optional
pronta para uso, portanto, não há necessidade de usar a goiaba por esse motivo específico no Java 8. O nome do método é um pouco diferente.Padrão do construtor. O padrão do construtor é usado para construtores e é implementado através da introdução de uma classe Builder separada:
Maps. Quando o número de parâmetros é muito grande e para a maioria dos valores padrão geralmente são usados, você pode passar argumentos de método como um mapa de seus nomes / valores:
No Java 9, essa abordagem ficou mais fácil:
Observe que você pode combinar qualquer uma dessas abordagens para obter um resultado desejável.
fonte
a
variável seja uma String (a conversão está correta).Optional
como parâmetro em uma das opções, esta resposta é muito boa.Existem parâmetros opcionais com o Java 5.0. Apenas declare sua função assim:
você poderia ligar com
doSomething();
oudoSomething(true);
agora.fonte
doSomething() { doSomething(true); }
há matrizes para lidar com, nenhuma ambigüidadeVocê pode usar algo como isto:
A
params
variável é opcional. É tratado como uma matriz anulável de objetos.Estranhamente, não consegui encontrar nada sobre isso na documentação, mas funciona!
Isso é "novo" no Java 1.5 e posterior (não suportado no Java 1.4 ou anterior).
Vejo que o usuário bhoot mencionou isso também abaixo.
fonte
Infelizmente, o Java não suporta parâmetros padrão diretamente.
No entanto, escrevi um conjunto de anotações JavaBean e uma delas suporta parâmetros padrão como o seguinte:
O processador de anotação gera sobrecargas no método para dar suporte adequado a isso.
Consulte http://code.google.com/p/javadude/wiki/Annotations
Exemplo completo em http://code.google.com/p/javadude/wiki/AnnotationsDefaultParametersExample
fonte
Não há parâmetros opcionais em Java. O que você pode fazer é sobrecarregar as funções e passar valores padrão.
fonte
VarArgs e sobrecarga foram mencionados. Outra opção é um padrão Builder, que seria algo como isto:
Embora esse padrão seja mais apropriado para quando você precisar de parâmetros opcionais em um construtor.
fonte
No JDK> 1.5, você pode usá-lo assim;
fonte
Você pode fazer algo usando a sobrecarga de método como esta.
Além disso, você pode usar a anotação @Nullable
simplesmente passe nulo como primeiro parâmetro.
Se você está passando a mesma variável de tipo, pode usar este
fonte
Versão curta :
Usando três pontos :
(com base na resposta de @ VitaliiFedorenko)
fonte
Sobrecarregar é bom, mas se houver muitas variáveis que precisam de valor padrão, você terá:
Então, eu sugiro usar o argumento variável fornecido pelo Java. Aqui está um link para explicação.
fonte
Você pode usar uma classe que funciona como um construtor para conter seus valores opcionais como este.
Use como
Saída é
Para pular todos os valores opcionais que você teria que chamar assim
foo(o -> {});
ou, se preferir, você pode criar um segundofoo()
método que não aceita os parâmetros opcionais.Usando essa abordagem, você pode especificar valores opcionais em qualquer ordem sem ambiguidade. Você também pode ter parâmetros de diferentes classes, diferentemente dos varargs. Essa abordagem seria ainda melhor se você pudesse usar anotações e geração de código para criar a classe Options.
fonte
O Java agora suporta opcionais no 1.8. Estou preso à programação no Android, então estou usando nulos até que eu possa refatorar o código para usar tipos opcionais.
fonte
Argumentos padrão não podem ser usados em Java. Onde em C #, C ++ e Python, podemos usá-los.
Em Java, precisamos usar 2 métodos (funções) em vez de um com parâmetros padrão.
Exemplo:
http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-
fonte
Essa é uma pergunta antiga, talvez antes mesmo da introdução do tipo opcional real, mas hoje em dia você pode considerar algumas coisas: - sobrecarregar o método - usar o tipo opcional que tem a vantagem de evitar passar NULLs ao redor do tipo opcional que foi introduzido no Java 8 antes de ser normalmente usado de lib de terceiros, como o Guava do Google. O uso opcional de parâmetros / argumentos pode ser considerado um uso excessivo, pois o objetivo principal era usá-lo como um tempo de retorno.
Ref: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html
fonte
Podemos tornar o parâmetro opcional por Sobrecarga de método ou Usando DataType ...
| * | Sobrecarga de método:
A maneira mais fácil é
| * | DataType ... pode ser parâmetro opcional
fonte
RetDtaTyp
... a sério? ÉRetDataType
muito difícil digitar?Se você planeja usar uma interface com vários parâmetros , pode-se usar o seguinte padrão estrutural e implementar ou substituir aplicar - um método baseado em seus requisitos .
fonte
Se for um ponto de extremidade da API, uma maneira elegante é usar as anotações "Spring":
Observe, nesse caso, que o innerFunc exigirá a variável e, como não é um ponto de extremidade da API, não pode usar esta anotação do Spring para torná-la opcional. Referência: https://www.baeldung.com/spring-request-param
fonte