[JAVA] Geben Sie ein Suffix für Methode 2 heraus

Einführung

Dieser Artikel ist eine Fortsetzung von Mit einer angehängten Methode herauskommen. Bitte beachten Sie, dass einige Teile leicht beschädigt sind.

Was mich interessiert hat

Letzter Artikel war nur Stressabbau, aber ich machte mir Sorgen um die Leistung. Ich möchte wissen, wie langsam der Zugriff auf die Reflection-API ist.

Anscheinend damit

Vorerst ließ ich ihn eine Weile erbrechen.

suffixMethodsCaller.java


package suffixMethodsCall;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class suffixMethodsCaller {

	/**
	 * <pre>
	 *Führen Sie alle Getter mit dem in SuffixMethods enthaltenen Suffix aus.
	 *Stellen Sie sicher, dass der matchTargetCode am Anfang enthalten ist.
	 * </pre>
	 */
	public static void main(String[] args) {

		//Messstart
		long measureStart = System.currentTimeMillis();

		//Zu übereinstimmende Zeichenfolge
		String matchTargetCode = "J";
		//Codeliste aus der Methode mit Suffix
		List<String> codeList = new ArrayList<String>();

		//Geben Sie Klasse und Methode als Zeichenfolge an
		suffixMethods sm = new suffixMethods();
		String clazz = sm.getClass().getName();
		String baseSuffixMethod = "getReturnCode";
		int suffixPartStart = 1;
		int suffixPartEnd = 10;

		//Führen Sie eine Methode mit Suffix mithilfe von Reflection aus
		try {
			Class<?> c = Class.forName(clazz);
			Object myObj = c.newInstance();

			//Schleifen Sie den Suffix-Teil und tauchen Sie in die Codeliste ein
			for ( ; suffixPartStart <= suffixPartEnd; suffixPartStart++) {
				//Einstellungen der Ausführungsmethode
				Method m = c.getMethod(baseSuffixMethod + String.format("%02d", suffixPartStart));
				//In Codeliste packen
				codeList.add(m.invoke(myObj).toString());
			}
		} catch(ReflectiveOperationException e) {
			e.printStackTrace();
		}

		//Ausgabe mit bool, ob die übereinstimmende Zeichenfolge in der Ausführungsergebnisliste der Methode mit Suffix enthalten ist
		System.out.println(codeList.contains(matchTargetCode));

		//Die Messung ist beendet!
		long measureEnd = System.currentTimeMillis();
		System.out.println((measureEnd - measureStart) + "ms");
	}
}

Ausführungsergebnis


true
44ms

Ich sehe ich sehe. Als nächstes lass uns verrückt werden.

suffixMethodsCaller2.java


package suffixMethodsCall;

public class suffixMethodsCaller2 {

	/**
	 * <pre>
	 *Führen Sie alle Getter mit dem in SuffixMethods enthaltenen Suffix aus.
	 *Stellen Sie sicher, dass der matchTargetCode am Anfang enthalten ist.
	 * </pre>
	 */
	public static void main(String[] args) {

		//Messstart
		long measureStart = System.currentTimeMillis();

		//Zu übereinstimmende Zeichenfolge
		String matchTargetCode = "J";

		suffixMethods sm = new suffixMethods();

		//Ausgabe mit bool, ob die übereinstimmende Zeichenfolge in der Ausführungsergebnisliste der Methode mit Suffix enthalten ist
		System.out.println(sm.getReturnCode01().equals(matchTargetCode) || sm.getReturnCode02().equals(matchTargetCode)
				|| sm.getReturnCode03().equals(matchTargetCode) || sm.getReturnCode04().equals(matchTargetCode)
				|| sm.getReturnCode05().equals(matchTargetCode) || sm.getReturnCode06().equals(matchTargetCode)
				|| sm.getReturnCode07().equals(matchTargetCode) || sm.getReturnCode08().equals(matchTargetCode)
				|| sm.getReturnCode09().equals(matchTargetCode) || sm.getReturnCode10().equals(matchTargetCode));

		//Die Messung ist beendet!
		long measureEnd = System.currentTimeMillis();
		System.out.println((measureEnd - measureStart) + "ms");
	}
}

Ausführungsergebnis


true
1ms

e. .. .. ?? Ja wirklich? Es macht so einen Unterschied.

Ich war ein bisschen besorgt, also noch einer. Es ist ein schlechter Satz, aber ich möchte die Wahrheit umkehren und sehen, ob sich etwas ändert. Ich habe die Genauigkeit auf nanoTime verbessert.

suffixMethodsCaller3.java


package suffixMethodsCall;

public class suffixMethodsCaller3 {

	/**
	 * <pre>
	 *Führen Sie alle Getter mit dem in SuffixMethods enthaltenen Suffix aus.
	 *Stellen Sie sicher, dass der matchTargetCode am Anfang enthalten ist.
	 * </pre>
	 */
	public static void main(String[] args) {

		//Messstart
		long measureStart = System.nanoTime();

		//Zu übereinstimmende Zeichenfolge
		String matchTargetCode = "J";

		suffixMethods sm = new suffixMethods();

		//Ausgabe mit bool, ob die übereinstimmende Zeichenfolge in der Ausführungsergebnisliste der Methode mit Suffix enthalten ist
		System.out.println(!sm.getReturnCode01().equals(matchTargetCode) && !sm.getReturnCode02().equals(matchTargetCode)
				&& !sm.getReturnCode03().equals(matchTargetCode) && !sm.getReturnCode04().equals(matchTargetCode)
				&& !sm.getReturnCode05().equals(matchTargetCode) && !sm.getReturnCode06().equals(matchTargetCode)
				&& !sm.getReturnCode07().equals(matchTargetCode) && !sm.getReturnCode08().equals(matchTargetCode)
				&& !sm.getReturnCode09().equals(matchTargetCode) && !sm.getReturnCode10().equals(matchTargetCode));

		//Die Messung ist beendet!
		long measureEnd = System.nanoTime();
		System.out.println((measureEnd - measureStart) + "ns");
	}
}

Es ist schwer zu lesen.

Ausführungsergebnis


false
1127314ns

Hmm. Ich werde versuchen, die vorherige Nano-Bestellung zu machen.

Ausführungsergebnis


true
1100219ns

Oh. Ich habe es mehrmals versucht und das Ergebnis war fast das gleiche. Es ist nur die Überlegenheit oder Unterlegenheit der Lesbarkeit. Ich habe viel gelernt.

Ich bin jedoch überrascht über die Langsamkeit bei der Verwendung von Reflexion. Liegt es daran, dass es eine for-Anweisung gibt? Das Ergebnis war das gleiche, auch wenn ich dachte, ich hätte die Schleife verloren.

schließlich

Reflexion scheint für Geschäftsanwendungen nicht empfohlen zu werden. Ich persönlich mag es, weil es sehr interessant für interne Util usw. verwendet werden kann.

Dieser Artikel begann mit Stressabbau, aber als ich tatsächlich meine Hände bewegte, lernte ich viel. Ich hoffe, es wird jedem helfen.

Recommended Posts

Geben Sie ein Suffix für die Methode an
Geben Sie ein Suffix für Methode 2 heraus
[Ruby] Schneiden Sie eine Zeichenfolge mit der Slice-Methode aus
Ich bin sofort auf die Standardeingabemethode mit AtCoder gestoßen.
Simulieren Sie die Simplex-Methode mit der GUI
Programmieren mit Ruby (unterwegs)
Logik zum Zeichnen eines Kreises auf der Konsole mit ASCII-Grafik
Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
Meine Gedanken zur Equals-Methode (Java)
Deklarieren Sie eine Methode mit einem Java-Rückgabewert mit dem Rückgabewert-Datentyp
Erstellen Sie mit dem Befehl eine JAR-Datei
Ruft die als Argument übergebene Zeichenfolge als Methode mit send auf
Ein Hinweis zur libGDX Utils-Klasse
Führen Sie DMN mit der Camunda DMN Engine aus
Verwenden Sie das benannte Format mit Rubys Formatmethode
Hello World, eine plattformübergreifende GUI-App mit Groovy, die auf der Java-Plattform ausgeführt wird
Ein kurzer Hinweis zur Verwendung von jshell mit dem offiziellen Docker-Image des JDK
Verwenden Sie Vorlagen für den Klassenpfad mit Apache Velocity
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Stimmt die Anmerkungen auf der Schnittstelle mit Spring AOP überein
Erstellen Sie eine Mehrschlüsselkarte mit einer Standardbibliothek
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
Ich habe mit Ruby On Rails ein Portfolio erstellt
Über die Methode
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Zeigen Sie die Liste in setDetails mit Federsicherheit auf dem Bildschirm an
Warum mit Singleton anstelle einer statischen Methode implementieren?
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
So reduzieren Sie die Programmlast ein wenig, wenn Sie Zeichen mit JAVA kombinieren
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?