[JAVA] Erstellen Sie ein Reflexionsprogramm ②

Diesmal ist es eine Methode, das Feld des Argumentobjekts mit einem geeigneten Wert zu füllen. In JUnit sagen Sie oft: "Ich möchte vorerst das Feld für ein bestimmtes Objekt füllen, aber es ist zu ärgerlich, den Setter einzeln anzurufen!" In einem solchen Fall habe ich eine Methode erstellt, die die Felder entsprechend ausfüllt.

Was ich letztes Mal gemacht habe → Diejenige, die die private Methode ausführt

Dienstprogrammmethode erstellt

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++;
		}
	}
}

Versuche dich zu bewegen

Bereiten Sie ein geeignetes POJO vor

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

Testmethode

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

Ausführungsergebnis

Konsole


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)

Nachwort

Was machst du, wenn das Miso char ist? Diese Methode konzentriert sich auf das obere Alphabet von A bis Z. Weitere Klassen werden nach Bedarf hinzugefügt. Es tut mir leid, wenn ein Fehler vorliegt, da ich den Grenzwert nicht überprüft habe.

Es ist eine alte Java-Methode geworden, aber ich wollte Java 8 wirklich so weit wie möglich integrieren.

Oder ist es wahrscheinlich, dass sich ein solches Dienstprogramm überhaupt in einer Bibliothek befindet? ??

Recommended Posts

Erstellen Sie ein Reflexionsprogramm ②
Erstellen Sie ein Reflexionsprogramm ③
Erstellen Sie ein Reflexionsprogramm ①
[Java] Mach es konstant
[Schienen] Machen Sie eine Brotkrumenliste
Machen Sie einen Diamanten mit Java
Machen Sie mit Ruby2D ein Labyrinth
Mach eine Sprache! (Einen einfachen Taschenrechner machen ②)
Versuchen Sie, einen einfachen Rückruf zu tätigen
Erstellen Sie mit JavaFX ein Diashow-Tool
So erstellen Sie einen Java-Container
So erstellen Sie einen JDBC-Treiber
Priority Queue max Machen Sie es zu einer Warteschlange
Mach eine Sprache! (Java CC-Umgebungskonstruktion)
Machen Sie eine Müllabfuhr mit line-bot-sdk-java
Erstellen Sie eine Listenkarte mit LazyMap
Ein Murmeln über die Utility-Klasse
Mach eine Sprache! (Einen einfachen Taschenrechner machen ①)
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
Machen Sie einen SOAP-Aufruf in C #
Versuchen Sie, einen Iterator zu erstellen, der einen Blick darauf werfen kann
So erstellen Sie ein Java-Array
Machen Sie ein Tippspiel mit Ruby
So erstellen Sie eine Java-Kalenderzusammenfassung
Notieren Sie sich die Ruby-Schlüsselwortargumente
Machen wir eine Weihnachtskarte mit Verarbeitung!
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Wie erstelle ich einen Discord Bot (Java)
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
[Java] Erstellen wir eine DB-Zugriffsbibliothek!