4 - Lembre-se: serializar um objeto é conseguir representá-lo de alguma forma em um arquivo. Aqui, você deve instanciar um objeto do tipo Tarefa e fazer com que o conteúdo do objeto vá para o arquivo tarefa.json. Para isso, utilize o Jackson para te auxiliar na tarefa. Observação: para criar novos arquivos, podemos utilizar new File("tarefa.json").
@SpringBootApplication
public class ContadorApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ContadorApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Tarefa tarefa = new Tarefa("Resolver lista de exercícios", false, "Aline");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("tarefa.json"), tarefa);
System.out.println("Arquivo criado.");
5 - Agora, você fará o oposto da atividade anterior: a desserialização de um arquivo, que é ler os valores de um arquivo específico e transformar em um objeto. Leia o conteúdo do arquivo tarefa.json, produzido no exercício anterior, e o transforme em um objeto do tipo Tarefa. Exiba o conteúdo do objeto na tela.
@SpringBootApplication
public class ContadorApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ContadorApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Tarefa tarefa = new Tarefa("Resolver lista de exercícios", false, "Aline");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("tarefa.json"), tarefa);
System.out.println("Arquivo criado.");
Tarefa tarefaLida = mapper.readValue(new File("tarefa.json"), Tarefa.class);
System.out.println(tarefaLida);
}
}
6 - Vamos criar objetos genéricos. Imagine que você trabalha em um site que oferece várias coisas: venda de produtos, serviços de instalação desses produtos e assinatura de alguns itens. Todas essas coisas têm algo em comum: podem ser avaliadas pelos consumidores. Crie uma classe genérica de Avaliação, de modo que possamos ter, por exemplo: Avaliacao, Avaliacao e Avaliacao. Essa classe deve ter o item genérico de avaliação, a nota e um comentário sobre a nota.
Tendo criado a classe genérica, você também pode criar um método para calcular as médias das notas recebidas, independente do tipo de item avaliado.
package br.com.alura.contador.model;
import java.util.List;
public class Avaliacao<T> {
private T item;
private double nota;
private String comantario;
public Avaliacao() {
}
public Avaliacao(T item, double nota, String comantario) {
if (nota < 0 || nota > 10) {
throw new IllegalArgumentException("Nota inválida. Digite uma nota entre 0 e 10.");
}
this.item = item;
this.nota = nota;
this.comantario = comantario;
}
public T getItem() {
return item;
}
public double getNota() {
return nota;
}
public String getComantario() {
return comantario;
}
public void setNota(double nota) {
if (nota < 0 || nota > 10) {
throw new IllegalArgumentException("Nota inválida. Digite uma nota entre 0 e 10.");
}
this.nota = nota;
}
public void setComantario(String comantario) {
this.comantario = comantario;
}
public static <T> double calcularMedia (List<Avaliacao<T>> avaliacoes) {
if (avaliacoes.isEmpty()) {
throw new IllegalArgumentException("A lista de avaliações está vazia.");
}
double soma = 0;
for (Avaliacao<T> avaliacao : avaliacoes) {
soma += avaliacao.nota;
}
return soma / avaliacoes.size();
}
@Override
public String toString() {
return "Avaliação {" + "Item: " + item + " | Nota: " + nota + " | Comantário: " + comantario + "}";
}
}
@SpringBootApplication
public class ContadorApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ContadorApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Avaliacao<String> aval1 = new Avaliacao<>("Produto1", 8.5, "Superou as expectativas.");
Avaliacao<String> aval2 = new Avaliacao<>("Produto1", 7.5, "Ok.");
List<Avaliacao<String>> listaAvaliacoes = new ArrayList<>();
listaAvaliacoes.add(aval1);
listaAvaliacoes.add(aval2);
double media = Avaliacao.calcularMedia(listaAvaliacoes);
System.out.println("A média das avaliações é: " + media);
}
}