Introdução ao varFormatter
O varFormatter é uma biblioteca para formatação de dados que permite converter objetos em representações textuais como JSON, XML e HTML. Ela utiliza mecanismos de reflexão e cache para otimizar o desempenho, evitando análises repetidas e minimizando o consumo de memória.
Instalação via Maven
Para adicionar a biblioteca ao seu projeto, inclua as seguintes dependências no arquivo pom.xml:
<dependencies>
<dependency>
<groupId>io.github.BeardedManZhao</groupId>
<artifactId>varFormatter</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>io.github.BeardedManZhao</groupId>
<artifactId>zhao-utils</artifactId>
<version>1.0.20240121</version>
</dependency>
</dependencies>
Exemplos de Uso
Obtendo um Formatador
O método getFormatter(boolean) permite recuperar instâncias de formatadores. Quando o parâmetro é true, uma instância singleton é retornada; caso contrário, uma nova instância é criada.
import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
public class ExemploSingleton {
public static void main(String[] args) {
final Formatter formatadorA = VarFormatter.JSON.getFormatter(true);
final Formatter formatadorB = VarFormatter.JSON.getFormatter(true);
final Formatter formatadorC = VarFormatter.JSON.getFormatter(false);
System.out.println(formatadorA == formatadorB); // true
System.out.println(formatadorA == formatadorC); // false
}
}
Formatando Objetos Complexos
A função format(Object) converte qualquer objeto em uma string formatada. A estrutura do objeto é analisada apenas uma vez, com cache aplicado para melhorar o desempenho.
import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
public class ExemploObjeto {
public static void main(String[] args) {
final Formatter formatador = VarFormatter.JSON.getFormatter(true);
DadosExemplo dados1 = new DadosExemplo();
DadosExemplo dados2 = new DadosExemplo();
dados2.setIdade(2048);
System.out.println(formatador.format(dados1));
System.out.println(formatador.format(dados2));
}
static class DadosExemplo {
private String nome = "Ana";
private int idade = 30;
private HashMap<String, Object> atributos = new HashMap<>();
private SubDados subDados = new SubDados();
{
atributos.put("chave1", 100);
atributos.put("chave2", "valor");
}
static class SubDados {
private String detalhe = "Detalhes";
private List<Integer> numeros = new ArrayList<>();
{
numeros.add(10);
numeros.add(20);
}
}
}
}
Formatando Mapas
O método format(Map) oferece uma conversão mais rápida para objetos do tipo Map.
import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
import java.util.HashMap;
public class ExemploMapa {
public static void main(String[] args) {
final Formatter formatador = VarFormatter.JSON.getFormatter(true);
HashMap<String, Object> mapaPai = new HashMap<>();
HashMap<String, Object> mapaFilho = new HashMap<>();
mapaFilho.put("nome", "Carlos");
mapaFilho.put("idade", 25);
mapaPai.put("amigo", mapaFilho);
mapaPai.put("cidade", "Lisboa");
System.out.println(formatador.format(mapaPai));
}
}
Utilizando DataObj e XmlNodeObj
A classe DataObj permite uma conversão direta sem reflexão, enquento XmlNodeObj suporta atributos, útil para formtaos como XML e HTML.
import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
import top.lingyuzhao.varFormatter.utils.XmlNodeObj;
import java.util.List;
import java.util.ArrayList;
public class ExemploAvancado {
public static void main(String[] args) {
final Formatter formatadorHTML = VarFormatter.HTML.getFormatter(true);
XmlNodeObj raiz = new XmlNodeObj("html");
XmlNodeObj corpo = new XmlNodeObj("body");
raiz.setAttr("lang", "pt");
raiz.addFilho(corpo);
corpo.addFilho(new XmlNodeObj("p", "Texto do parágrafo"));
XmlNodeObj divisao = new XmlNodeObj("div");
divisao.setAttr("style", "color:blue");
divisao.addFilho(new XmlNodeObj("span", "Conteúdo da divisão"));
corpo.addFilho(divisao);
System.out.println(formatadorHTML.format(raiz));
}
}
Formatadores para XML e HTML
Os formatadores XML e HTML possuem uma interface similar. O formatador XML gera uma árvore de tags, enquanto o HTML mantém a ordem dos elementos para garantir a integridade visual.
import top.lingyuzhao.varFormatter.core.Formatter;
import top.lingyuzhao.varFormatter.core.VarFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
public class ExemploXML {
public static void main(String[] args) {
final Formatter formatadorXML = VarFormatter.XML.getFormatter(true);
ElementoDados elemento = new ElementoDados();
System.out.println(formatadorXML.format(elemento));
}
static class ElementoDados {
private String titulo = "Relatório";
private int total = 50;
private HashMap<String, String> metadados = new HashMap<>();
private List<String> itens = new ArrayList<>();
{
metadados.put("autor", "João");
itens.add("Item1");
itens.add("Item2");
}
}
}