varFormatter: Biblioteca de Formatação de Dados com Conversão Rápida de Objetos em Memória

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");
        }
    }
}

Tags: java JSON XML HTML formatação-de-dados

Publicado em 7-13 08:38