[JAVA] Erstellen Sie ein Reflexionsprogramm ③

Einführung

Diesmal ist es Reflexion mit Anmerkungen. Feldanmerkungen sind nützlich, wenn ein Feld einige Attribute haben soll, Sie es aber nicht in Ihre Geschäftslogik schreiben möchten.

Die, die ich letztes Mal gemacht habe → Dienstprogramm, um das Feld des Objekts mit einem geeigneten Wert zu füllen

Was ich diesmal gemacht habe

Dieses Mal habe ich eine Util-Methode erstellt, die ein Entity-Objekt in horizontal konvertiert (1 CSV-Datensatz).

--Datenanmerkung --AnnotationUtil Klasse --Benutzerklasse --Hauptklasse

AnnotationUtil Geben Sie die Kopfzeile mit der Methode getHeader aus. Geben Sie eine Datenzeile mit der Methode getData aus.

AnnotationUtil.java


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

public class AnnotationUtil {
	/**Komma*/
	private static final String DELIMITER = ",";
	/**Doppeltes Zitat*/
	private static final String QUOTE = "\"";

	/**
	 *Benutzer in CSV1-Zeile konvertieren.<br>
	 *Benutzer hat@Gibt das Feld mit Daten als eine CSV-Zeile zurück.<br>
	 * isHeader=Wenn true, wird der Titel im angegebenen CSV-Format zurückgegeben.
	 */
	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(); //Titel
				} else {
					value = String.valueOf(f.get(obj)); //Wert
				}
			} catch (IllegalArgumentException | IllegalAccessException e) {
				//Da die Throws-Deklaration problematisch ist, machen Sie zur Laufzeit alle Ausnahmen
				throw new RuntimeException(e);
			}

			//Wenn das Boxzeichen angegeben ist
			if (quote != null)
				sb.append(quote);
			//Wert oder Artikelname
			sb.append(value);
			//Wenn das Boxzeichen angegeben ist
			if (quote != null)
				sb.append(quote);

			//Trennzeichen
			sb.append(delimiter);
		}
		//Entfernen Sie das letzte Trennzeichen
		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 Fügen Sie diese Anmerkung dem Feld hinzu, das als CSV-Daten ausgegeben werden soll. Geben Sie den Headernamen mit dem Titel an.

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 Entitätsklasse. Fügen Sie dem Feld, das Sie ausgeben möchten, eine Datenanmerkung hinzu.

User.java


package test1;

public class User {
	@Data(title = "Mitarbeiter-ID")
	public Integer id;
	@Data(title = "Name")
	public String name;
	public String insertDate;
	public String insertUser;
	public String updateDate;
	public String updateUser;
}

Main Zur Überprüfung des Betriebs des Dienstprogramms.

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

}

Ausführungsergebnis

python


### Start ###
"Mitarbeiter-ID","Name"
"101","Albert"
### End ###

Es wurde von vertikal nach horizontal konvertiert. Da Daten nur zu ID und Name hinzugefügt werden, werden nur diese beiden ordnungsgemäß ausgegeben.

Nachwort

Als ich es zum ersten Mal seit einiger Zeit ohne Verwendung der IDE implementierte, wurden die Rückgabewerte von Feld # getAnnotation () aus irgendeinem Grund alle NULL. Es hat gut funktioniert, als ich die IDE verwendet habe, aber warum? ??

Recommended Posts

Erstellen Sie ein Reflexionsprogramm ②
Erstellen Sie ein Reflexionsprogramm ③
Erstellen Sie ein Reflexionsprogramm ①
[Schienen] Machen Sie eine Brotkrumenliste
Machen Sie einen Diamanten mit Java
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 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
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Wie erstelle ich einen Discord Bot (Java)
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Erstellen Sie trotzdem eine Anmeldefunktion mit Rails
[Java] Erstellen wir eine DB-Zugriffsbibliothek!