Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Vamos 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, defina valid como true; caso contrário, não altere celsius e defina valid como false
    • Um getter isValid() para o campo boolean (lembre-se: getters booleanos usam o prefixo is)
    • Um getter getFahrenheit() que converte e retorna a temperatura em Fahrenheit usando a fórmula: (celsius * 9/5) + 32
  • 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: true ou Valid: false
    • Fahrenheit: 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
    }
}
quiz iconTeste seus conhecimentos

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