Java Reflection

Bom pessoal, venho aqui falar um pouco sobre Reflection, mas antes de começamos irei especificar um pouco sobre o conceito da Reflecção.

Reflection é a capacidade de um programa se observar (Introspecção), podendo obter informações de si mesmo e modificar sua estrutura, o paradigma de reflexão pode também ajudar na melhoria do código

Utilizando Reflection

Como de toda natureza de um programa o mesmo tende a crescer seja ela de forma planejada ou não, independente da forma que o mesmo cresce a gente se depara com uns métodos desse tipo.


public class foo{

	public boolean existeNulos(Bar bar){

		if(bar.getId() == null){
			return true;
		}

		if(bar.getName() == null){
			return true;
		}

		if(bar.getAge() == null){
			return true;
		}

		if(bar.getAdress() == null){
			return true;
		}

		if(bar.getPhone() == null){
			return true;
		}

		if(bar.getCellPhone() == null){
			return true;
		}

		if(bar.getDocument() == null){
			return true;
		}

	} 

	return false;
}

Okay, também concordo que isso não é nenhuma grande método mas aposto que um dia ela poderá se tornar. O exemplo acima mostra que sempre que um novo atributo for adicionado na classe você vai ter que vim aqui e validar se o novo atributo é nulo.

Mas Como eu disse anteriomente, a Reflection tem uma característica que é de melhoria no código, seja ela de perfomace ou/e de refactory, então se eu fosse verificar se existe algum atributo nulo com Reflection eu simplesmente implementaria isso.


public class foo{
	public boolean existeNulos(Object obj){
 		Class<?> clazz = obj.getClass();

		try {
			for(Field field : clazz.getDeclaredFields()){
				field.setAccessible(true);
				Object value = field.get(obj);
				if(value == null){
					return true;
				}
			}
		}catch (Exception e) {
			throw new RuntimeException("Erro ao ler campo");
		}

			return false;
		}
				
	}

Visivelmente meu código se tornou muito menos cansativo de ler e outro beneficio é que agora você pode validar qualquer atributo de qualquer objeto, evitando repetição de código.

Entendo um pouco sobre o código

A primeiro coisa a ser feita é pegar a class do objeto passado por parâmetro

	Class<?> clazz = obj.getClass();

Logo em seguida foi feito um forEach na lista de Atributos declarados utilizando o getDeclaredFields() que retornar todos atributos da classe. Caso você utilize o getFields só irá ser retornados os atributos públicos.

try {
   for(Field field : clazz.getDeclaredFields()){
   ...

Para cada atributo eu o torno acessível para que eu possa acessar seu estado e em seguida crio um atributo do tipo Object que recebe o valor do atributo, verifico se o mesmo é nulo ou não.

   field.setAccessible(true);
   Object value = field.get(obj);
   if(value == null){
      return true;
   }

Resumidamente falando

Isso é apena o começo de uma serie de artigos que irei fazer sobre reflection abordando sobre como trabalhar com class,fields, methods e annotation.

Até a próxima pessoal e não se esqueçam de deixar seu comentário com dúvidas ou críticas !

Referências

https://docs.oracle.com/javase/tutorial/reflect/

Editor Config

Algumas vezes você precisa utilizar o Marketplace para baixar um plugin para melhorar a usabilidade da sua IDE, Performace da sua aplicação ou qualquer outra coisa, mas muitas vezes você esbarra no problema de proxy da sua empresa ou até mesmo de casa e fica impossibilitado de baixar esses plugins, mas para isso existe solução e é bem simples.

Configurando o proxy

Eu estou utilizando o Eclipse Neon mas acredito que não seja diferente para outras versões anteriores.

Vá até: Window/Preferences/General/Network Connection

Janela Preference, aba Network connection

1° Na combobox do Action Provider selecione a opção Manual
2° Selecione HTTP e depois Edit
3° Insira sua configuração de proxy e pronto

Configuração do proxy

Agora você pode acessar o Marketplace e começar a baixar seus plugins.
Tenha um bom proveito.

Editor Config

Você muito provavelmente já teve problema com o encoded ou identação trabalhando em um projeto em equipe, cada programador tem sua IDE ou Editor de Texto com suas configurações preferidas e com isso os problemas surgem, caracteres quebrados, identação por espaço ao invés de tab , identação arquivos .alguma-coisa errada. Mas para isso existe solução e aqui vou mostrar como configurar o plugin do editorConfig

O que é EditorConfig

EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs.

Ele simplesmete é um arquivo .editorconfig que pode ser configurado com o estilo de codificação planejado pela equipe. Ele pode ser utilizado em diversos editores como por exemplo o Sublime, ATOM e IDE como o eclipse e NetBeans. Você pode conferir se o seu editor preferido oferece suporte ao editorConfig aqui.

Aqui você pode ver um exemplo do arquivo de configuração minima.

Editor Config

Você pode provisionar o arquivo para que toda a sua equipe utilize o mesmo coding style independente da configuração do editor do desenvolvedor

Instalando o editorConfig no eclipse

Para utilizar o editorConfig no seu eclipse basta instalar o plugin que pode ser encontrado no eclipse MarketPlace.

Editor Config

Ou no github do projeto aqui

Editor Config

Utilizando o editorConfig

O charset que está sendo utilizado para esse tutorial será do LATIM1 para o UTF-8

Editor Config

Para começamos a utilizar o editorConfig você precisar criar um arquivo .editorconfig no root do projeto, eu irei utilizar a configuração minima.

root = true

[*]
end_of_line = lf
insert_final_newline = true

[*.{java,js}]
charset = "UTF-8"

[*.java]
indent_style = tab

[{pom.xml}]
indent_style = tab
indent_size = 2

Explicação

root = true

[*]
end_of_line = lf
insert_final_newline = true

Aqui informo que a configuração do editor será aplicado em todo o projeto e que para todo fim de linha será adicionado uma nova linha.

[*.{java,js}]
charset = "UTF-8"

[*.java]
indent_style = tab

[{pom.xml}]
indent_style = tab
indent_size = 2

Definimos a configuração do charset para os arquivos .java e .js e apenas a identação por tab para os arquivos .java. Também defino uma configuração personalizada para o pom.xml

Basta você salvar o arquivo e todo o projeto estará configurado com o coding style definido no arquivo. Caso o editor não tenha sido configurado depois de ter salvo basta formatar o projeto novamente (CTRL + SHIFT + K) no root do projeto.

O editorConfig é uma ferramenta muito útil, principalmente como se trabalha em equipe a configuração também é bastante simples e personalizável onde você pode está implementado a medida das suas necessidades basta ver sua documentação.

Espero que isso ajude a todos vocês.

O Começo

Hello Spock

Bom para tudo há um começo e esse blog será o meu, a muito tempo tenho vontade de escrever um blog com o foco em T.I, compartilhando meus conhecimento e resolução de problemas que tive e irei ter. A ideia desse blog é simplesmente compartilhar conhecimento com a comunidade, sempre tive vontade de ter um lugar para compartilhar e discuti sobre tudo ou praticamente tudo. Eu nunca fui uma pessoa de falar longos textos tentando enrolar alguma coisa, sempre tentei ser ao máximo preciso e tentarei trazer isso para vocês, quero falar como resolver um problema de forma rápida e bastante objetiva.

Mais um blog na área de T.I…

mr. bean entediado

É… Eu também pensei isso antes de começar a escrever esse blog, milhares de blog na área , muita gente falando sobre linguagens, DevOps, Metodologia Ágil e tudo mais. Mas então o que eu irei escrever aqui ? Irei escrever o que mais sinto falta nos blogs. Falar do dia a dia, resolver problemas que não achamos fácil e mostrar o que ando aprendendo por ai de novo(é isso eu não iria achar em outro blog,site), pretendo trazer guias completos e não ficar preso somento a uma linguagem ou metodologia por exemplo. Quero explorar e mostrar esse mundo a todos vocês.

Bom, Bom, ta me conveceu.

jim carey ok

Bom, se eu consegui lhe convecer seja pelos gifs ou por você confiar no pouco que falei aqui, peço a vocês que me acompanhe nessa nova trajetória e que eu possa ajudar a você e também aprender com você. Farei o possível para manter o blog atualizado pelo menos com um novo artigo por semana e sempre que tiver resolvido um problema rápido tentarei atualizar aqui. Por enquato é isso pessoal.