Lokale Klassen

ohmp2007

Mitglied
Hallo Leute, habe gelesen dass lokale Klassen ein anderer Begriff für innere Klassen sind!

Habe das hier dazu gefunden:

Lokale Klassen sind auch innere Klassen, die jedoch nicht als Eigenschaft direkt in einer Klasse eingesetzt werden. Diese Form der inneren Klasse befindet sich in Anweisungsblöcken von Methoden oder Initialisierungsblöcken. Lokale Schnittstellen sind nicht möglich...

Kann mir es bitte einer mit anderen Worten erklären :)

Java:
public class DrinnenMachtSpass
{
  public static void main( String[] args )
  {
    int i = 2;
      final int j   = 3;
    class In
    {
      In() {
        System.out.println( j );
//        System.out.println( i );    // Fehler, da i nicht final
      }
    }
    new In();
  }
}
 

tfa

Top Contributor
Grob gesagt: Eine lokale Klasse ist eine Inner Class, die in einer Methode definiert wird. Siehe dein Beispielcode.

Mich würde interessieren, ob jemand hier lokale Klassen praktisch einsetzt. Der Nutzen scheint mir sehr beschränkt zu sein.
 

Marco13

Top Contributor
Ein Beispiel könnte sein, wenn man irgendwelche Objekte kurz zusammenfassen will, z.B um einen Array von ints zu sortieren, aber danach noch die "permutation" für den Originalarray zu erhalten - dann könnte man sowas machen wie
Code:
class IntPair implements Comparable...
{
    int a, b;
}
Aber es stimmt: Alltäglich sind sie eher nicht...
 

patrick81

Mitglied
ein typisches Beispiel für Klassen in Methoden findet man häufig bei Threads und Listeners

z.B wenn ein neuer Thread gestartet wird
Java:
public static void main(String[] args) throws Exception {
		
		new Thread(new Runnable() {
			
			public void run() {
				//do something
			}
		}).start();
		
}

kann man auch so definieren
Java:
public static void main(String[] args) throws Exception {
		
		class MyRunnable implements Runnable {

			public void run() {
				//do something
			}
			
		}
		
		Runnable runnable = new MyRunnable();
		
		new Thread(runnable).start();
		
	}
 

tfa

Top Contributor
@patrick81
Das erste Beispiel ist eine normale anonyme Inner Class. Die ist sehr häufig.
Sie durch eine lokale Klasse zu ersetzen wie im zweiten Beispiel ist überflüssig.
 

Noctarius

Top Contributor
Ich habe es noch nie benutzt, aber der einzige Nutzen, den ich erkennen kann ist die Möglichkeit Konstruktoren zu nutzen, welche man bei anonymen Klassen nicht hat.

Naja fast:

Java:
public void foo(final Bar bar) {

  new Thread(new Runnable() {
    privat final String name;

    {
      this.name = bar.getName();
    }

    public void run() {
      doSomething();
    }
  });

}

Man hat also schon eine Art Konstruktor :) Sieht man daran, dass das final-Konstrukt sauber aufgelöst wird.


PS: Auf die Frage nach Benutzung von lokalen Klassen - noch nie gebraucht, anonyme Klassen reichen mir.
 

Marco13

Top Contributor
Ja, @tfa, sowas ähnliches wollte ich auch @patrick81 schreiben... habe dann aber überlegt, wie man die beiden Fälle voneinander abgrenzen kann. Man könnte GROB sagen, dass man eine Lokale Klasse braucht, wenn man mehrere Instanzen einer Klasse braucht, die anonym sein könnte, wenn ... man nicht mehrere Instanzen brauchen würde ... :roll: (mehr Koffein... :oops: )
 

Andi_CH

Top Contributor
@patrick81
Das erste Beispiel ist eine normale anonyme Inner Class. Die ist sehr häufig.
Sie durch eine lokale Klasse zu ersetzen wie im zweiten Beispiel ist überflüssig.

... ausser du brauchst sie mehr als einmal

Ein weiteres Beispiel:
Enums haben wir hier einige lokale - in der Regel beschreiben die den Status eines Objektes und sind public. Es kann schon hinterfragt werden ob eine innere Klasse richtig ist, aber einerseits reduziert es die Anzahl Files und, IMHO wesentlich wichtiger, es signalisiert die Zusammengehörigkeit.

Viele heissen "Status" - die Notation
Code:
Abc.Status.xyz
ist durchaus elegant zu lesen.
 
T

Tomate_Salat

Gast
@Andi_CH: Ich glaube du verwechselst hier nested-class mit locale-class. Eine Nested-Class oder static-nested-class ist ganz nett (wird ja auch sehr gerne von Google eingesetzt :) ). Aber eine lokale klasse, ja ich wusste das es sie gibt. Aber verwendet habe ich sie noch nie. Sehe jetzt keinen Vorteil zur anonymen inneren Klasse.
 

tfa

Top Contributor
Man könnte GROB sagen, dass man eine Lokale Klasse braucht, wenn man mehrere Instanzen einer Klasse braucht, die anonym sein könnte, wenn ... man nicht mehrere Instanzen brauchen würde
Ja, das wäre der einzige Vorteil.
Vielleicht für Testdaten in einem Unit-Test, wenn man viele Objekte einer Klasse haben möchte. (Man könnte natürlich auch eine normale Nested Class nehmen.)
 

Noctarius

Top Contributor
Wo braucht man da denn eine lokale Klasse? Ich benötige nur eine Instanz der anonymen Klasse - oder habe ich den Sinn der Aussage "mehrere" falsch verstanden?

Java:
public void foo() {
    final Runnable runnable = new Runnable() {
        public void run() {
        }
    }
}
 
B

Beni

Gast
Ein weiterer Vorteil von lokalen gegenüber anonymen Klassen ist, dass lokale Klassen mehrere Interfaces implementieren können.
Java:
public void foo(){
  class Irgendwas implements Comparable<Irgendwas>, Runnable{
    ...
  }

  List<Irgendwas> list = new ArrayList<Irgendwas>();
  list.add( new Irgendwas( 123 ));
}

P.S. Das letzte mal, dass ich eine lokale Klasse benutzte war ein kleiner, unbedeutender Algorithmus bei dem Objekte auf mehrere Listen und Maps verteilt werden mussten.
 

Andi_CH

Top Contributor
Schon wieder etwas gelernt ...

Da sieht man, dass an Schulen doch nicht immer alles richtig doziert wird ;-)

Klassen in Klassen drin wurden uns als lokal verkauft und die hier als lokal bezeichneten wurden uns verschwiegen - zugegebenermassen sehe ich allerdings dafür auch keine weitverbreitete Anwendung, denn ...

Ein weiterer Vorteil von lokalen gegenüber anonymen Klassen ist, dass lokale Klassen mehrere Interfaces implementieren können.

... das können nested Classes auch ;-)
 
T

Tomate_Salat

Gast
... das können nested Classes auch ;-)

und haben Zugriff auf private:
Java:
public class Readable 
{
	public static void main(String[] args) 
	{
		Readable readable=new Readable();
		Readable.Writable writAble=readable.new Writable(); // <-- ist ein wenig ungewohnt zu lesen
		
		writAble.setName("Peter");
		System.out.println(readable.getName());
	}
	
	private String name;
	
	public String getName() {
		return name;
	}
			
	public class Writable 
	{		
		public void setName(String name)
		{
			Readable.this.name=name;
		}		
	}
}

wobei man hier aufpassen muss, dass man wirklich eine nested und keine static-nested verwendet. Letzteres kann gehandhabt werden, wie eine normale top-level-class.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M anonyme nicht-lokale Klassen Java Basics - Anfänger-Themen 13
H Lokale Klassen und Zugriff. Java Basics - Anfänger-Themen 10
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
S Verständnisfrage lokale Ordnerpfade Java Basics - Anfänger-Themen 1
P Variablen Wie kann ich eine lokale Variable in eine andere Methode einfügen? Java Basics - Anfänger-Themen 27
M Anonyme Klasse und lokale Variable Java Basics - Anfänger-Themen 2
B Lokale Datenbank Java Java Basics - Anfänger-Themen 2
A Variablen lokale Variable als private? Java Basics - Anfänger-Themen 3
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
D Von einer Methode auf eine lokale Variable in der Main zugreifen? Java Basics - Anfänger-Themen 15
A lokale Variable innerhalb "actionPerformed()" Java Basics - Anfänger-Themen 10
N Mit Kontrukor der Oberklasse lokale Variable initialisieren Java Basics - Anfänger-Themen 2
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
J Instanzvariablen - Lokale Variablen - warum der Unterschied? Java Basics - Anfänger-Themen 5
T zugriff auf lokale variablen? Java Basics - Anfänger-Themen 6
M lokale exe-Datei über Java-Applet starten Java Basics - Anfänger-Themen 4
M lokale IP auslesen und auf URL weiterleiten Java Basics - Anfänger-Themen 8
Developer_X Batch Datei soll auf lokale JLibrary zugreifen Java Basics - Anfänger-Themen 11
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
L Lokale Variablen automatisch durch Schleife erzeugen Java Basics - Anfänger-Themen 2
E Lokale variablen in methode Java Basics - Anfänger-Themen 6
C Nochmal zu lokale Einstellungen Java Basics - Anfänger-Themen 2
E Lokale Dateien ausführen, IE,FF Java Basics - Anfänger-Themen 3
P Unterschied lokale Variable und Instanzvariable Java Basics - Anfänger-Themen 2
roflomfg Text in eine lokale "*.txt-Datei" speichern Java Basics - Anfänger-Themen 9
7 Lokale Variablen, Klassenvariablen, Instanzvariablen Java Basics - Anfänger-Themen 15
K Lokale Variable in for Schleife Java Basics - Anfänger-Themen 5
S lokale Programme per Button starten Java Basics - Anfänger-Themen 4
G Auf lokale Variablen zugreifen Java Basics - Anfänger-Themen 5
P Lokale Dateien in Java-Applets einlesen Java Basics - Anfänger-Themen 2
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben