Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Declaração de variável genérica do tipo double

Boa tarde,

estava acompanhando o curso de Java com Spring Boot e no trecho que fala sobre variáveis genéricas, não é explicado sobre dois tipos de declarações distintas, no que parece ser uma dependência do tipo de dado que será utilizado na instância.

        Caixa<Double> caixaDeValor = new Caixa<>();
        Caixa<Integer> caixaDeIdade = new Caixa();

Digo, no trecho "new Caixa<>()" vs "new Caixa()".

Porque existe essa diferença na realização da instância?

1 resposta
solução!

Oii José, tudo bem?

A principal razão para essa diferença tá relacionada ao recurso de inferência de tipo do Java, introduzido no Java 7 com o operador diamante (<>). Quando você usa new Caixa<>(), o compilador Java infere automaticamente o tipo de parâmetro genérico com base no tipo declarado na variável. Por exemplo:

Caixa<Double> caixaDeValor = new Caixa<>();

Aqui, o compilador infere que o tipo de Caixa é Double baseado no lado esquerdo da atribuição.

Mas, quando você usa new Caixa(), você não tá especificando explicitamente o tipo genérico. Isso pode levar a uma situação chamada "raw type" (tipo bruto), onde o tipo genérico não é especificado. Usar tipos brutos é desencorajado porque você perde todos os benefícios de segurança e clareza de tipos que os genéricos oferecem.

No entanto, em contextos onde o tipo genérico pode ser claramente inferido, como na inicialização direta de uma variável, o Java permite usar o operador diamante para simplificar o código. Aqui está um exemplo prático para ilustrar isso:

public class TestaCaixa {
    public static void main(String[] args) {
        Caixa<Integer> caixaDeIdade = new Caixa(); // Raw type, desencorajado
        caixaDeIdade.setConteudo(30); // Funciona, mas não é a prática ideal

        Caixa<Integer> caixaDeNumero = new Caixa<>(); // Uso do operador diamante, tipo inferido e seguro
        caixaDeNumero.setConteudo(45); // Seguro e claro
    }
}

Recomenda-se sempre especificar o tipo genérico usando o operador diamante para evitar o uso de tipos brutos e manter a segurança e clareza do tipo no seu código.

Um abraço e bons estudos.