Klassen Warning "synthetic access" bei innerer Klasse

cable545

Aktives Mitglied
hallo
ich habe in Eclipse eine Warning Meldung die ich nicht verstehe. Diese lautet:
"Read access to enclosing field ...... is emulated by a synthetic accessor method"
Diese tritt auf in einer inneren Klasse in welcher ich eine "private" Variable der äußeren Klasse nutze.
Wenn ich den Zugriff von "private" auf "public ändere verschwindet die Meldung in Eclipse.
Kann mir eventuell jemand helfen und erklären was es mit der Meldung auf sich hat?
 

faetzminator

Gesperrter Benutzer
Das heisst, dass die Inner Class wohl gar keinen Zugriff hätte. Aber der Compiler ermöglicht dir das über eine generierte Methode. Wieso verwendest du nicht [c]protected[/c]?
 

Gossi

Bekanntes Mitglied
Und wie siehts aus, wenn du getter benutzt anstelle eines direkten Zugriffs?

Also
Java:
private int variable;

public void setVariable(int variable) {
     this.variable = variable;
}

public int getVariable() {
     return this.variable;
}
 

cable545

Aktives Mitglied
Die Instanzvariable welche ich in der inneren Klasse nutze ist ein Button aus der SWT Bibleothek. Ich nutze ihn in der äußeren als auch in der inneren Klasse. Aber ich wolllte nicht, dass man mit einer Instanz der äußeren Klasse auf das Button Objekt von außen zugreifen kann. Daher das "private".
 

cable545

Aktives Mitglied
"Die mit private deklarierten Methoden und Variablen sind nur innerhalb der eigenen Klasse sichtbar. Eine Ausnahme bilden innere Klassen, die auch auf private Eigenschaften der äußeren Klasse zugreifen können."

Keine Ahnung warum mir Eclipse diese Wahrnungen verpasst. Ich werd mal versuchen die Klasse mit dem javac zu compilieren. Mal sehen was der sagt.
 
S

SlaterB

Gast
eine Warnung ist nunmal eine Warnung, kein Fehler,
es kompiliert, es funktioniert,
nur unterschlägt der ""-Satz, dass da auf komplizierte Weise Zugriffsmethoden für das private Feld angelegt werden müssen,
die Warnung teilt dir das mit, du kannst sie ignorieren, gar ausschalten (generell oder einzeln per Annotation) oder den Modifier des Attributes ändern für besseren internen Zugriff
 

faetzminator

Gesperrter Benutzer
Wie gesagt, der Compiler muss irgendwas dazu basteln, weil er sonst nicht auf das Feld zugreifen kann. Es ist zwar erlaubt, aber er kann es nicht direkt machen. Wenn du dazu googelst, findest du überall die gleichen Antworten.
Um was geht es genau? Je nach Anwendungsfall kann man es anders kapseln oder protected Methoden anbieten, welche das gewünschte Ergebnis liefern. Wenn die Inner Class z.B. nur einen Reset für eine Variable vornehmen können muss, und die Variable [c]private Foo foo[/c] heisst, dann würde ich mir [c]protected void resetFoo()[/c] implementieren.
Es liegt bei dir, ob du die Warning bearbeiten willst, oder nicht.
 

Gossi

Bekanntes Mitglied
Es liegt bei dir, ob du die Warning bearbeiten willst, oder nicht.

Wobei es manchmal ne ganz schöne Qual sein kann alle Warnings zu bearbeiten:
Java-Problems(89 items)

Vielleicht sollte ich Eclipse mal weniger emfpindlich einstellen xD

PS:
Generell sollte man sich jedoch um alle Warnings kümmern, die sind ja nicht umsonst da....
 

faetzminator

Gesperrter Benutzer
Java-Problems(89 items)

Qual? 89 Items? Ich hab schon Projekte mit >20k übernommen :D Aber alleine schon durch die Auto-Fixes konnte man das auf 1000 Items reduzieren.
In den Projekten hab ich fast nur noch die Meldungen, dass man Generics verwenden sollte. Ist aber leider nicht lösbar, da die Datenschnittstellen ohne Generics bekommen und diese %"*ç+*%ç im Moment überhaupt nicht daran denken, so was zu implementieren :autsch:
 

Gossi

Bekanntes Mitglied
Qual? 89 Items? Ich hab schon Projekte mit >20k übernommen :D Aber alleine schon durch die Auto-Fixes konnte man das auf 1000 Items reduzieren.
In den Projekten hab ich fast nur noch die Meldungen, dass man Generics verwenden sollte. Ist aber leider nicht lösbar, da die Datenschnittstellen ohne Generics bekommen und diese %"*ç+*%ç im Moment überhaupt nicht daran denken, so was zu implementieren :autsch:

Die 89-Items sind ja nach 3 Wochen Projektüberholung, davor warens über 600....(Sind seit dem 200 Zeilen code dazu gekommen xD)
 

cable545

Aktives Mitglied
Also ich hab eine Gui Klasse in der ich ein paar Instanzvariablen, also "Buttons", hab. Die inneren Klassen sind die listener Klassen in meiner Gui Klasse. Diese implementieren jeweils ein listener Interface mit den dazugehörigen Methoden. Ich brauche die Buttons in diesen Methoden als auch in der äußeren Klasse.
 

faetzminator

Gesperrter Benutzer
Na dann verwend doch - wie nun schon zum x. Mal vorgeschlagen - [c]protected[/c]. Meist meint man nur, man benötigt [c]private[/c], aber eigentlich genügt [c]protected[/c]. Das einzige, was manchmal etwas stört, ist hier die Paketsichtbarkeit. Aber [c]private[/c] verwende ich meist nur, wenn eine abgeleitete Klasse dieses Feld nicht sehen sollte. Aber warum sollte nun z.B. eine Subklasse deines GUIs keinen Zugriff auf deine Buttons haben?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Warning bei Build jar Allgemeine Java-Themen 9
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
G Warnung in der Konsole von Eclipse "WARNING: ..." Allgemeine Java-Themen 2
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
S Keine Exception-Warning in Eclipse Allgemeine Java-Themen 3
E Heap und Comparable (warning: [unchecked] unchecked cast) Allgemeine Java-Themen 2
G GC Warning: Repeated allocation of very large block Allgemeine Java-Themen 35
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
T JNI: jcharArray: warning: cast to pointer from integer of. Allgemeine Java-Themen 5
N warning bei Vectoren Allgemeine Java-Themen 15
N warning beim compilieren des eigenen TableRenderers Allgemeine Java-Themen 5
Bluedaishi Access violation error Allgemeine Java-Themen 2
T Frage zu Access Modifiers Allgemeine Java-Themen 6
E To count password and username access possibility Allgemeine Java-Themen 10
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
B Load Library and use JNA to access Allgemeine Java-Themen 3
S Access Restrictions in Eclipse auf Code beschraenken (und nicht fuer Comments) Allgemeine Java-Themen 2
J Access restriction Allgemeine Java-Themen 5
T access$800 Allgemeine Java-Themen 8
J Nice Office Access und Mac Allgemeine Java-Themen 6
S Concurrency access auf eine Map Allgemeine Java-Themen 6
M Access Frontend als Webanwendung Allgemeine Java-Themen 8
S Innere Klassen und die statische Methode access$x Allgemeine Java-Themen 5
B Access-Befehle werden in der falschen Reiehnfolge ausgeführt Allgemeine Java-Themen 4
timomeinen Access Modifier vor Kompilierung ändern Allgemeine Java-Themen 9
P access denied / policy problem Allgemeine Java-Themen 4
W Daten in Access einfügen über Java Allgemeine Java-Themen 21
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
H Applet - java.security.AccessControlException: access. Allgemeine Java-Themen 6
D Mit Java Daten aus Access holen und als VCard versenden Allgemeine Java-Themen 3
W Sonderzeichen in Access 97 schreiben Allgemeine Java-Themen 2
J MS Access mit Java ansprechen Allgemeine Java-Themen 3
T Word, Excel u. Access API Allgemeine Java-Themen 2
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
J MS Access-Reports steuerung mit Java Allgemeine Java-Themen 6
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
C access control list in java Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben