Métodos Getter e Setter
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 11 de 87.
Getters e setters são métodos que fornecem acesso controlado a campos privados. Um getter recupera o valor de um campo, enquanto um setter o modifica.
A convenção de nomenclatura segue um padrão comum: prefixo get ou set seguido pelo nome do campo com a primeira letra em maiúscula.
public class Product {
private String name;
private double price;
// Getter para name
public String getName() {
return name;
}
// Setter para name
public void setName(String name) {
this.name = name;
}
// Getter para price
public double getPrice() {
return price;
}
// Setter com validação
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}O verdadeiro poder dos setters é a capacidade de adicionar lógica de validação. No exemplo acima, setPrice aceita apenas valores não negativos, protegendo o objeto de dados inválidos.
Para campos boolean, getters normalmente usam o prefixo is em vez de get:
private boolean active;
public boolean isActive() {
return active;
}Você também pode criar campos de apenas leitura fornecendo apenas um getter, ou campos de apenas escrita fornecendo apenas um setter. Isso lhe dá um controle refinado sobre como o código externo interage com os dados do seu objeto.
Desafio
FácilVamos construir um conversor de Temperature que demonstra o poder dos getters e setters com lógica de validação.
Você criará dois arquivos para organizar seu código:
Temperature.java: Defina uma classe Temperature que armazena um valor de temperatura em Celsius. A classe deve ter:- Um campo privado
celsius(double) - Um campo privado
valid(boolean) que rastreia se a temperatura é fisicamente possível - Um getter
getCelsius()que retorna o valor de celsius - Um setter
setCelsius()que aceita apenas valores iguais ou superiores ao zero absoluto (-273.15). Se o valor for válido, definavalidcomo true; caso contrário, não altere celsius e definavalidcomo false - Um getter
isValid()para o campo boolean (lembre-se: getters booleanos usam o prefixois) - Um getter
getFahrenheit()que converte e retorna a temperatura em Fahrenheit usando a fórmula:(celsius * 9/5) + 32
- Um campo privado
Main.java: Crie um objeto Temperature, leia um valor celsius como entrada, use o setter para defini-lo, então imprima se a temperatura é válida e seu equivalente em Fahrenheit. Formate sua saída em duas linhas:Valid: trueouValid: falseFahrenheit: X.X(mostrando uma casa decimal)
Você receberá uma entrada: um valor double representando uma temperatura em Celsius.
Para formatar a saída de Fahrenheit para uma casa decimal, você pode usar String.format("%.1f", value).
Folha de consulta
Getters e setters são métodos que fornecem acesso controlado a campos privados. Um getter recupera o valor de um campo, enquanto um setter o modifica.
A convenção de nomenclatura segue um padrão padrão: prefixo get ou set seguido pelo nome do campo com sua primeira letra em maiúscula.
public class Product {
private String name;
private double price;
// Getter para name
public String getName() {
return name;
}
// Setter para name
public void setName(String name) {
this.name = name;
}
// Getter para price
public double getPrice() {
return price;
}
// Setter com validação
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Setters podem incluir lógica de validação para proteger objetos de dados inválidos. No exemplo acima, setPrice aceita apenas valores não negativos.
Para campos boolean, os getters usam o prefixo is em vez de get:
private boolean active;
public boolean isActive() {
return active;
}Você pode criar campos somente leitura fornecendo apenas um getter, ou campos somente escrita fornecendo apenas um setter.
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: Criar um objeto Temperature
// TODO: Usar o setter para definir o valor celsius
// TODO: Imprimir se a temperatura é válida (formato: "Valid: true" ou "Valid: false")
// TODO: Imprimir o equivalente em Fahrenheit (formato: "Fahrenheit: X.X")
// Hint: Use String.format("%.1f", value) para uma casa decimal
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator