Code in Methode auslagern möglich?

player_z

Mitglied
Hallo zusammen,
ich habe folgendes Problem.
Ich habe eine switch-case abfrage mit 6 verschiedenen case-Fällen. Diese Fälle sind jeweils ewig lang, enthalten aber bis auf wenige Zeilen, immer den selben Code. Diese Zeilen sind Methodenaufrufe. In Case-Fall 1 wird die Methode m1 aufgerufen, in case-Fall 1 die Methode m2()

Besteht die Möglichkeit eine Methode zu erstellen, die jeweils den Methodennamen mitgegeben bekommt?
Also etwa so
switch()
case 0:einemethode(m1());
break;
case 1:einemethode(m2());
break;

Vielen Dank im Voraus.
 
G

Gast2

Gast
Würde über Reflections gehen, aber das solltest du nicht machen.

Alles was gleich ist schreibst du einfach vor die switch anweisung (auch gerne in methodenaufrufe ausgelagert), da wo es sich unterscheidet schreibste dann nen switch.
 
R

Reflections

Gast
Einen Methoden-Namen kannst du nur verwenden wenn du mit Reflections arbeitest.
Aber warum machst du es nicht anders : wenn deine 6 Calls immer quasi den selben Code enthalten dann nimm doch nur eine und füge genau an der Stelle wo die Codes unterschiedlich sind das switch-case ein. Denn wenn du 6 Methoden machst in denen sich dann nur 2 oder 3 Zeilen unterscheiden nennt sich das "Code-Duplizierung" und das sollte immer möglichst vermieden werden.
Aber einfach eine "machWas()" Methode schreiben und dieser einen anderen Methoden-Namen übergeben geht so nicht. Dafür gibt es via Reflections die Möglichkeit [japi]Class#getDeclaredMethod(java.lang.String, java.lang.Class...)[/japi] und zu deren Ausführung [japi]Method#invoke(java.lang.Object, java.lang.Object...)[/japi].

Aber für deine Aufgabe sollte man keine Reflections verwenden. Eher so wie EikeB und ich angemerkt haben.
 

player_z

Mitglied
problem ist, dass ich die methoden mehrmals aufrufe, also am ende, in der mitte, aber auch ganz am anfang, dann bringts auch nix das vor die switch anweisung zu schreiben
 

HoaX

Top Contributor
Klingt dann ehr nach einem Fehler im Konzept. Wenn du genauer erläuterst was das für Methoden sind und wie diese Zusammenhängen mit dem Switch, evtl. mit etwas Code, dann kann man bestimmt Tipps geben wie man es anders/besser machen kann.
 

player_z

Mitglied
so sieht das aus:
Java:
switch (tmp) {
			
			case 1:
				geklappt = setLinks(a);
				while (!geklappt) {
					if (a.isGespiegelt() && a.getDrehung() == 3) {
						a.print();
						System.out.println("Passt nicht auf diese Seite");
						a.setGespiegelt(false);
						cntlinks++;
						liste.add(a);
						a.setVerwendet(false);
						if (cntlinks == liste.size()) {
							if (vorne.isGespiegelt() && vorne.getDrehung() == 3) {
								liste.add(vorne);
								vorne.setGespiegelt(false);
								cntlinks = 0;
							} else {
								vorne.drehen();
								liste.addFirst(vorne);
							}
							links = new Seite();
							vorne.setVerwendet(false);
							tmp--;
							cntlinks = 0;
						}
						break;
					}
					a.drehen();
					geklappt = setLinks(a);
				}
				if (geklappt) {
					a.print();
					System.out.println("passt links");
					tmp++;
				}
				break;
			case 2:
				geklappt = setHinten(a);
				while (!geklappt) {
					if (a.isGespiegelt() && a.getDrehung() == 3) {
						a.print();
						System.out.println("Passt nicht auf diese Seite");
						a.setGespiegelt(false);
						cnthinten++;
						liste.add(a);
						a.setVerwendet(false);
						if (cnthinten == liste.size()) {
							if (links.isGespiegelt() && links.getDrehung() == 3) {
								liste.add(links);
								links.setGespiegelt(false);
								cnthinten = 0;
							} else {
								links.drehen();
								liste.addFirst(links);
							}
							hinten = new Seite();
							links.setVerwendet(false);
							tmp--;
							cnthinten = 0;
						}
						break;
					}
					a.drehen();
					geklappt = setHinten(a);
				}
				if (geklappt) {
					a.print();
					System.out.println("passt hinten");
					tmp++;
				}
				break;
			case 3:
 

HimBromBeere

Top Contributor
Unabhängig von deiner Frage kann ich dir zumindest schonmal sagen, dass die Bedingung in Zeile 32 obsolet ist, denn die vorherige while-Schleife wird sowieso nur für den Fall beendet, dass
Code:
geklappt
auf wahr steht.
 

Marco13

Top Contributor
Als es noch keine elektronischen Hilfsmittel dafür gab, benutzte man zur Kartographierung des Sternenhimmels und insbesondere zur Identifikation von bewegten Objekten (Kometen) ein spezielles Gerät: Dort konnten zwei Bilder eines Himmelsausschnitts eingespannt werden, die zu unterschiedlichen Zeiten gemacht wurden. Man konnte in dieses Gerät reinsehen, und mit einem Kippmechanismus schnell zwischen den eingelegten Bildern hin- und her schalten. Objekte, die sich bewegt hatten nahm man als "blinkend" wahr. Das Menschliche Auge reagiert erstaunlich empfindlich auf Änderungen, wie etwa ein Blinken.

Gelegentlich füge ich zwei Codestücke als zwei Dokumente in TextPad ein, und schalte dann mit den Pfeiltasten hoch und runter, zwischen den Dokumenten hin und her. Die unterschiedlichen Teile des Codes blinken dann vor sich hin.

(Es gab Leute, die mich erstaunlich oft dazu genötigt haben, indem sie sich einen neuen Job suchten, und mir :autsch: Code hinterließen)

Womit wir bei deinem Code wären :D

Im wesentlichen müsste ja anscheinend die Methode "setHinten" bzw. "setLinks" rausfaktorisiert werden. Ohne auf die anderen möglichen Details einzugehen, die im nicht-geposteten Code stecken:
Java:
interface ThingSetter{
    boolean setThing(Thing t);
}

void machWasKrampfigAussehendesMit(ThingSetter ts)
{
                geklappt = ts.setThing(a);
                while (!geklappt) {
...
                    geklappt = ts.setThing(a);
                }
...
}

// Aufruf:
ThingSetter hintenSetter = new ThingSetter() {
    @Override
    public boolean setThing(Thing t) { return setHinten(t); }
}
machWasKrampfigAussehendesMit(hintenSetter);
...
machWasKrampfigAussehendesMit(vorneSetter);
machWasKrampfigAussehendesMit(schrägDiametralGegenüberSetter);
...
 

ARadauer

Top Contributor
im Grunde das was dein Code macht in kleine schlanke Methoden auslagern... wenn du sagst

Diese Fälle sind jeweils ewig lang, enthalten aber bis auf wenige Zeilen, immer den selben Code
dieser gleiche Code macht ja was bestimmtes, also auslagern und wiederverwenden..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
OnDemand Clean Code oder Allgemeine Java-Themen 5
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
O Standard library nativer C code Allgemeine Java-Themen 1
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen ​ Allgemeine Java-Themen 3
N Morse Code decoder Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
S Eclipse exit code 805306369 Allgemeine Java-Themen 1
Pataraca Vererbung Code einbinden Allgemeine Java-Themen 3
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
F Verständlichkeitsproblem bei Java Code?! Allgemeine Java-Themen 2
G Eclipse Eclipse: Unreachable code Allgemeine Java-Themen 16
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
C Code vereinfachen Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
R Java-Code für folgene Aufgabe? Allgemeine Java-Themen 8
Prafy Best Practice Code Refaktorisierung Allgemeine Java-Themen 7
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
C ASCII-Code in Java Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
J LWJGL 3 Error Code 1282 Allgemeine Java-Themen 4
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Frage zu meinem Code Allgemeine Java-Themen 2
B Code generierung Velocity Templates Telosys Allgemeine Java-Themen 1
E Fehlermeldung vor dem Programm code Allgemeine Java-Themen 1
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
L Eclipse Editieren des Code templates für Override methods Allgemeine Java-Themen 2
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
N HTTP response code: 403 Allgemeine Java-Themen 3
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
D Java Compiler code referencen Allgemeine Java-Themen 0
B Fehler im Java-Code Allgemeine Java-Themen 4
A PHP-Code zu Java-Code Allgemeine Java-Themen 5
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
X Was macht folgender Code!? Allgemeine Java-Themen 6
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
Fab1 Best Practice Vorgehensweise bestehenden Code/Programm verschönern Allgemeine Java-Themen 4
M Code optimieren Allgemeine Java-Themen 7
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
S EAN-Code Tabelle für CD's Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Erzeugung von Java-Code Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben