Como declarar um método que não pode mudar os membros da classe em Java? [duplicado]
Em C ++, fazemos um método constante e, portanto, ele não pode alterar o valor dos membros da classe, mas como posso fazer isso em Java? Tentei a declaração do método final, que seria o equivalente às consts em C ++, mas os métodos finais são outra coisa diferente. Eu quero fazer um método getter, então ele não pode alterar os valores, apenas lê-lo. Como um método somente leitura.
Respostas
Em Java, não é possível impedir declarativamente que um método altere campos não finais. Não existe "const correção" em Java.
Se um campo de classe não for - final
, ele pode ser alterado por qualquer método da classe.
Observe que final
funciona de maneira diferente em campos e variáveis em relação a métodos e classes:
- Um
final
campo ou variável é uma constante. Seu valor não pode ser alterado depois de atribuído. - Um
final
método não pode ser substituído por classes filhas.final
em métodos não tem nada a ver com "constância". - Uma
final
classe não pode ser estendida.final
em classes não tem nada a ver com "constância".
Suas opções em Java são:
- Torne sua classe imutável (ou seja, marque todos os seus campos
final
). - Basta escrever seus getters (e outros métodos não modificadores) com cuidado :)
Mais uma nota. Mesmo em campos e variáveis, o Java final
difere do C ++ const
. Por exemplo:
final
as variáveis não podem ser alteradas depois de atribuídas, mas você pode atribuí-las após a declaração. Exemplo:final int value; if (condition) { value = 1; // Ok! } else { value = 2; // Ok! } value = 3; // Compile error: value already assigned.
final
campos de classe devem ser atribuídos - diretamente ou de dentro de um construtor. Mas esses campos podem ser atribuídos em qualquer lugar dentro de um construtor. Não há nada especial como a "lista de inicializadores" do C ++ em Java.A declaração de campo / variável / parâmetro
final Object obj
em Java é aproximadamente equivalente a uma referência (const-) a um objeto não const em C ++. Isso significa que você não pode reatribuir a referência , mas pode alterar o próprio objeto referenciado. Um exemplo:// Note that (obsolete) Date class is mutable in Java. final Date myDate = new Date(); myDate = new Date(); // Compilation error: can't reassign a final reference! myDate.setTime(4711); // Ok, mutating referenced object is allowed!
Você não pode fazer isso. O método final significa que não pode ser substituído.