static inner Klassen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Moin,

hab gerade ein static inner Klasse ausprobiert und bin begeistert.
Verwendet ihr solche Konstrukte oft bzw. bin ich auf der Suche nach Anwendungsfällen,
Habt ihr da einige Vorschläge?

Code:
package javaapplication35;

public class Calculation {

	public double calculate(double x, Operation operation, double y) {
	    return operation.eval(x, y);
	    }

	public abstract static class Operation {

        private String name;

        public Operation(String name) {
            this.name = name;
            }

	    public abstract double eval(double x, double y);

	    public static Operation PLUS = new Operation("+") {
            public double eval(double x, double y) { return x + y;}
            };

	    public static Operation MAL = new Operation("*") {
            public double eval(double x, double y) { return x * y;}
            };
	}
}
 

tfa

Top Contributor
Inner Classes sind nie statisch. Das was du meinst ist nur eine "nested class", also eine eingebettete Klasse. Wenn möglich, sollte man eingebettete Klassen immer statisch machen, also inner classes vermeiden.
Solche eingebetteten Klassen sind eine gute Möglichkeit zur Kapselung seiner Daten. Wenn die Objekte der nested class nur von einer äußeren Klasse verwendet bzw. verwaltet werden, kann man die gut lokal definieren. Auch wenn man sie über eine Schnittstelle nach außen zur Verfügung stellen will.
 
S

Spacerat

Gast
tfa hat gesagt.:
Inner Classes sind nie statisch. Das was du meinst ist nur eine "nested class", also eine eingebettete Klasse. Wenn möglich, sollte man eingebettete Klassen immer statisch machen, also inner classes vermeiden.
Klar... wenn man eingebettete Klassen nicht statisch macht, werden es "inner-classes". Das fatale an deinem Satz fällt wohl nur Querlesern auf. :) Glücklicherweise weis man sofort was du sagen willst. "inner-classes" vermeiden ist auch eine gute Idee. Ist das auch bei "generischen" Klassen möglich (innere Klasse verwendet Parameter der äusseren)? Wenn ja, wüsste ich gerne wie.

mfg Spacerat
 

didjitalist

Bekanntes Mitglied
nested classes gibt es nur in zwei geschmacksrichtungen: statisch und nicht statisch. mehr gibs da nicht zu unterscheiden. nicht statische nested classes (manche nennen sie wohl inner classes), benötigen ein exemplar ihrer umgebenen klasse, um erzeugt werden zu können.

man sollte nested classes daher nur dann nicht-statisch machen, wenn so ein objekt niemals ohne seine umgebene klasse existieren darf. meist sind aber parametrisierte statische nested classes der schmerzlosere weg.
 

tfa

Top Contributor
meist sind aber parametrisierte statische nested classes der schmerzlosere weg.
Ja, aber die können die Parameter der äußeren Klasse nicht verwenden, da die Objekte ja isoliert existieren. Ich glaube, darum ging die Frage.
 
S

Spacerat

Gast
@tfa: Genau darum gehts (mir zumindest).

Ich habe da folgendes:
Code:
public class ObjectStore<K extends CharSequence, V>
implements Iterable<ObjectStore.Entry<K, V>>
{
    public interface Entry<KK extends K, VV extends V>
    {
        KK getKey();
        VV getValue();
    }
}
"Entry" ("inner-class") ist hier zwar nach aussen Sichtbar aber nicht von dort zu verwenden (z.B. für anonyme Instanzierung ohne eine Instanz von "ObjectStore").
Code:
public class ObjectStore<K extends CharSequence, V>
implements Iterable<ObjectStore.Entry<K, V>>
{
    public static interface Entry<KK, VV>
    {
        KK getKey();
        VV getValue();
    }
}
Lässt man die "extends"-Klauseln weg, bekommt man "Entry" auch statisch. Nun ist "Entry" nicht nur Sichtbar, ich kann es auch ausserhalb von "ObjectStore" verwenden (z.B. anonym instanzieren).

Dabei fällt mir auf, das das eine das andere ausschliesst. Meine Frage wie ich "Entry", mit Beibehaltung der Eigenschaft es nach Aussen hin unverwendbar zu lassen, statisch bekomme, dürfte sich damit wohl erledigt haben. Es geht nicht.

mfg Spacerat
 

tfa

Top Contributor
Richtig, weil du Eigenschaften von ObjectStore in Entry benötigst.
Das mit der Nichtverwendbarkeit nach Außen löst man aber am besten damit, die Klasse bzw. das Interface private zu machen.
 
S

Spacerat

Gast
Das hatte ich mir auch schon gedacht. Geht aber nicht, wegen "Iterable". Man soll doch wenigstens von aussen durch die Elemente iterieren können.

mfg Spacerat
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
I reflection get inner static classes Allgemeine Java-Themen 2
E Methoden abstract static Methode Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
P static Blocks und variablen Allgemeine Java-Themen 41
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
K Static Variablen verbieten Allgemeine Java-Themen 10
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Static oder andere Lösung Allgemeine Java-Themen 5
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
G static vor einem array Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
A JSP & static-Variablen Allgemeine Java-Themen 3
B Static Import: Syntaxfrage Allgemeine Java-Themen 2
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
Z auf static Methode aus anderen Package zugreifen? Allgemeine Java-Themen 7
N this im public static void Allgemeine Java-Themen 3
C Communication zwischen zwei Projekte - static objects Allgemeine Java-Themen 4
S static mit abstract und in interface Allgemeine Java-Themen 10
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
M reflection in inner classes Allgemeine Java-Themen 7
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
G Thread in Methode oder in inner class Allgemeine Java-Themen 3
M Problem mit Variablenzugriff bei annonymous inner classes Allgemeine Java-Themen 2
C Probleme bei inner class Allgemeine Java-Themen 3
B Von Inner Classes auf die "Outer Classes" zugreife Allgemeine Java-Themen 4
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben