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

Cette fois, c'est une méthode pour remplir le champ de l'objet argument avec une valeur appropriée. Dans JUnit, vous dites souvent: "Je veux remplir le champ pour un certain objet pour le moment, mais c'est trop ennuyeux d'appeler le passeur un par un!" Dans un tel cas, j'ai créé une méthode qui remplit les champs de manière appropriée.

Ce que j'ai fait la dernière fois → Celui qui exécute la méthode privée

Méthode utilitaire créée

ReflectionUtil.java


public static void fillAllFields(Object obj, int offset) throws IllegalArgumentException, IllegalAccessException {
	Assertions.assertThat(offset >= 0);
	boolean b = true;
	char c=(char) (65 + offset); // A+
	
	Field[] fieldList = obj.getClass().getDeclaredFields();
	for (int i = 0; i < fieldList.length; i++) {
		int num = i + offset;
		Field f = fieldList[i];
		f.setAccessible(true);
		String name = f.getName();
		Class<?> clazz = f.getType();

		if (Modifier.isFinal(f.getModifiers())) {
			continue;
		}
		if (clazz == String.class) {
			f.set(obj, name + num);
		} else if (clazz == Date.class) {
			Calendar calendar = Calendar.getInstance();
			int d = num % 28;
			calendar.set(2019, Calendar.MARCH, d);
			f.set(obj, calendar.getTime());
		} else if (clazz == Timestamp.class) {
			Calendar calendar = Calendar.getInstance();
			int d = num % 28;
			calendar.set(2019, Calendar.MARCH, d);
			f.set(obj, new Timestamp(calendar.getTimeInMillis()));
		} else if(clazz==boolean.class ||clazz==Boolean.class ){
			f.set(obj, b);
			b=!b;
		} else if(clazz==BigDecimal.class){
			f.set(obj, new BigDecimal(num));
		} else if(clazz==int.class||clazz==Integer.class){
			f.set(obj, num);
		} else if(clazz==long.class||clazz==Long.class){
			f.set(obj, ((Integer) num).longValue());
		} else if(clazz==float.class||clazz==Float.class){
			f.set(obj, ((Integer) num).floatValue());
		} else if(clazz==double.class||clazz==Double.class){
			f.set(obj, ((Integer) num).doubleValue());
		} else if(clazz==short.class||clazz==Short.class){
			f.set(obj, ((Integer) num).shortValue());
		} else if(clazz==byte.class||clazz==Byte.class){
			f.set(obj, ((Integer) num).byteValue());
		} else if(clazz==char.class||clazz==Character.class){
			if (c < 65 || 90 < c) c = 65;
			f.set(obj, ((char) c));
			c++;
		}
	}
}

Essayez de bouger

Préparez un POJO approprié

EntityA.java


@Data
public class EntityA {
	private String str;
	private Date date;
	private Timestamp ts;
	private Boolean bool;
	private BigDecimal bd;
	private Integer i;
	private long l;
	private Float f;
	private double d;
	private Short s;
	private byte b;
	private Character c;
}

Méthode d'essai

Tests.java


@Test
public void test1() {
	EntityA entity= new EntityA();
	try {
		ReflectionUtil.fillAllFields(entity, 25);
		System.out.println(entity);
	} catch (IllegalArgumentException | IllegalAccessException e) {
		e.printStackTrace();
		fail();
	}
}

Résultat d'exécution

console


EntityA(str=str25, date=Tue Mar 26 02:05:01 JST 2019, ts=2019-03-27 02:05:01.786, bool=true, bd=29, i=30, l=31, f=32.0, d=33.0, s=34, b=35, c=Z)

Épilogue

Que faites-vous quand le miso est du charbon? Cette méthode se concentre sur l'alphabet supérieur A-Z. D'autres classes seront ajoutées au besoin. Je suis désolé s'il y a un bogue car je n'ai pas vérifié la valeur limite.

C'est devenu une méthode Java héritée, mais je voulais vraiment incorporer Java 8 autant que possible.

Ou est-il probable qu'un tel utilitaire se trouve dans une bibliothèque en premier lieu? ??

Recommended Posts

Créer un utilitaire de réflexion ②
Créer un utilitaire de réflexion ③
Créer un utilitaire de réflexion ①
[Java] Rendez-le constant
[Rails] Faites une liste de miettes de pain
Faire un diamant en utilisant Java
Créez un labyrinthe de fouilles avec Ruby2D
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 conteneur Java
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
Faisons une carte de Noël avec Processing!
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
[docker] [nginx] Créer un ALB simple avec nginx
[Java] Créons une bibliothèque d'accès à la base de données!