[JAVA] Créer un utilitaire de réflexion ③

introduction

Cette fois, c'est la réflexion à l'aide d'annotations. Les annotations de champ sont utiles lorsque vous souhaitez qu'un champ ait quelques attributs, mais que vous ne voulez pas l'écrire dans votre logique métier.

Celui que j'ai fait la dernière fois → Utilitaire pour remplir le champ de l'objet avec une valeur appropriée

Ce que j'ai fait cette fois

Cette fois, j'ai créé une méthode Util qui convertit un objet Entity en horizontal (1 enregistrement de CSV).

AnnotationUtil Sortez la ligne d'en-tête avec la méthode getHeader. Sortez une ligne de données avec la méthode getData.

AnnotationUtil.java


package test1;
import java.lang.reflect.Field;

public class AnnotationUtil {
	/**virgule*/
	private static final String DELIMITER = ",";
	/**Double devis*/
	private static final String QUOTE = "\"";

	/**
	 *Convertir l'utilisateur en ligne CSV 1.<br>
	 *L'utilisateur a@Renvoie le champ contenant les données sous la forme d'une ligne CSV.<br>
	 * isHeader=Si vrai, le titre est renvoyé au format CSV spécifié.
	 */
	public static String getUser(User obj, boolean isHeader, String delimiter, String quote) {
		Field[] fieldList = obj.getClass().getDeclaredFields();
		StringBuilder sb = new StringBuilder();

		for (Field f : fieldList) {
			f.setAccessible(true);
			Data annotation = f.getAnnotation(Data.class);
			if (annotation == null) {
				continue;
			}
			String value;
			try {
				if (isHeader) {
					value = annotation.title(); //Titre
				} else {
					value = String.valueOf(f.get(obj)); //valeur
				}
			} catch (IllegalArgumentException | IllegalAccessException e) {
				//Étant donné que la déclaration throws est gênante, faites toutes les exceptions au moment de l'exécution
				throw new RuntimeException(e);
			}

			//Lorsque le caractère de la boîte est spécifié
			if (quote != null)
				sb.append(quote);
			//Valeur ou nom de l'article
			sb.append(value);
			//Lorsque le caractère de la boîte est spécifié
			if (quote != null)
				sb.append(quote);

			//Délimiteur
			sb.append(delimiter);
		}
		//Supprimer le dernier délimiteur
		sb.deleteCharAt(sb.length() - 1);

		return sb.toString();
	}

	public static String getHeader(User user) {
		return getUser(user, true, DELIMITER, QUOTE);
	}

	public static String getData(User user) {
		return getUser(user, false, DELIMITER, QUOTE);
	}
}

Data Ajoutez cette annotation au champ à générer en tant que données CSV. Spécifiez le nom de l'en-tête avec le titre.

Data.java


package test1;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Target(FIELD)
@Retention(RUNTIME)
public @interface Data {
	String title();
}

User Classe d'entité. Ajoutez une annotation de données au champ que vous souhaitez générer.

User.java


package test1;

public class User {
	@Data(title = "ID d'employé")
	public Integer id;
	@Data(title = "Nom")
	public String name;
	public String insertDate;
	public String insertUser;
	public String updateDate;
	public String updateUser;
}

Main Pour vérifier le fonctionnement de l'utilitaire.

Main.java


package test1;

public class Main {
	public static void main(String[] args) {
		System.out.println("### Start ###");
		User user = new User();
		user.id = 101;
		user.name = "Albert";
		user.insertDate = "20190501";
		user.insertUser = "Chris";
		user.updateDate = "20190512";
		user.updateUser = "Jill";

		System.out.println(AnnotationUtil.getHeader(user));
		System.out.println(AnnotationUtil.getData(user));
		System.out.println("### End ###");
	}

}

Résultat d'exécution

python


### Start ###
"ID d'employé","Nom"
"101","Albert"
### End ###

Il a été converti de vertical à horizontal. Étant donné que les données ne sont ajoutées qu'à l'identifiant et au nom, seuls ces deux éléments sont correctement générés.

Épilogue

Au début, quand je l'ai implémenté sans utiliser l'EDI pour la première fois depuis un certain temps, pour une raison quelconque, les valeurs de retour de Field # getAnnotation () sont devenues toutes NULL. Cela a bien fonctionné lorsque j'ai utilisé l'IDE, mais pourquoi? ??

Recommended Posts

Créer un utilitaire de réflexion ②
Créer un utilitaire de réflexion ③
Créer un utilitaire de réflexion ①
[Rails] Faites une liste de miettes de pain
Faire un diamant en utilisant Java
Faites une langue! (Faire une simple calculatrice ②)
Essayez de faire un simple rappel
Créer un outil de diaporama avec JavaFX
Comment créer un pilote JDBC
Priority Queue max En faire une file d'attente
Faites une langue! (Construction de l'environnement Java CC)
Faire un rappel de garbage avec line-bot-sdk-java
Créer une carte de liste avec LazyMap
Un murmure sur la classe utilitaire
Faites une langue! (Faire une simple calculatrice ①)
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment faire un projet Maven
Faire un appel SOAP en C #
Essayez de créer un itérateur qui puisse être vu
Comment créer un tableau Java
Faites un jeu de frappe avec ruby
Comment créer un résumé de calendrier Java
Notez les arguments de mot-clé Ruby
Faites une liste de choses à faire en famille avec Sinatra
Comment créer un robot Discord (Java)
Faites une liste de choses à faire en famille avec Sinatra
Créez quand même une fonction de connexion avec Rails
[Java] Créons une bibliothèque d'accès à la base de données!