1
resposta

Não achei

No código do exemplo eu não achei o ChronoUnit.YEAR, eu li e só achei ChronoUnit.YEARS. O erro seria outro então? Se sim, qual seria esse erro?

1 resposta

Olá, Vitor! Tudo bem?

Na verdade, a unidade correta é ChronoUnit.YEARS mesmo. O erro no código que você mencionou não está relacionado a isso, mas sim a outros pontos.

Vamos analisar o código do exercício:

System.out.println(YearMonth.now().isSupported(
    ChronoUnit.MONTHS));
System.out.println(YearMonth.now().isSupported(
    ChronoField.DAY_OF_MONTH));
System.out.println(MonthDay.now().isSupported(
    ChronoField.DAY_OF_MONTH));
System.out.println(LocalDate.now().isSupported(
    ChronoUnit.DAYS));
System.out.println(LocalDate.now().isSupported(
    ChronoUnit.YEARS)); 
System.out.println(LocalDateTime.now().isSupported(
    ChronoField.HOUR_OF_AMPM));
System.out.println(LocalDateTime.now().isSupported(
    ChronoField.YEAR));

O problema com esse código é que algumas das chamadas aos métodos isSupported não são válidas para os tipos de dados utilizados. Por exemplo:

  1. YearMonth.now().isSupported(ChronoField.DAY_OF_MONTH) não é suportado porque YearMonth não possui a informação do dia.
  2. MonthDay.now().isSupported(ChronoField.DAY_OF_MONTH) é suportado, pois MonthDay representa um mês e um dia.
  3. YearMonth.now().isSupported(ChronoUnit.MONTHS) é suportado, pois YearMonth representa um ano e um mês.
  4. LocalDate.now().isSupported(ChronoUnit.DAYS) e LocalDate.now().isSupported(ChronoUnit.YEARS) são suportados, pois LocalDate representa uma data completa.
  5. LocalDateTime.now().isSupported(ChronoField.HOUR_OF_AMPM) e LocalDateTime.now().isSupported(ChronoField.YEAR) são suportados, pois LocalDateTime representa uma data e uma hora completas.

Portanto, o código não compila devido ao uso incorreto do ChronoField com YearMonth.

A resposta correta para a pergunta do exercício é: D) Não compila

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.