Zugriff auf Klassen und Methoden

  • Antworten:18
Ralf Züllig
  • Forum-Beiträge: 12

25.10.2010, 21:36:38 via Website

Hallo Forum

Ich bin noch sehr neu in der Android Programmierung, mache aber meiner Meinung nach gute Fortschritte in dem ich Stück für Stück durch bestehende Tutorials und Codebeispiele das ganze zu verstehen lerne. Ich habe aber leider auch keine Erfahrung in Java und das ganze wie Package, Methoden und Klassen ist für mich noch ziemlich neu in das ich mich versuche hereinzuarbeiten. Besonders mit dem Zugriff auf Klassen und Methoden und all dem 'private', 'public', 'static' Zeugs ist für mich noch sehr schwer zu verstehen. Ich habe jetzt die letzten 2 Stunden einiges dazu gelesen und dutzendfach alle Kombinationen an meinem Programm ausprobiert, jedoch leider ohne Erfolg.

Zum eigentlichen Problem. Ich habe gestern ein Programm geschrieben das soweit auch super funktioniert:

1package pre.arraylist;
2
3import java.util.ArrayList;
4
5import android.app.Activity;
6import android.os.Bundle;
7import android.widget.TextView;
8
9public class startactivity extends Activity {
10 /** Called when the activity is first created. */
11
12 public class Customer {
13
14 private String name;
15 private String phoneNumber;
16
17 public Customer() {
18 }
19
20 public Customer(String name, String phoneNumber) {
21 this.name = name;
22 this.phoneNumber = phoneNumber;
23 }
24
25 public void setName(String name) {
26 this.name = name;
27 }
28
29 public String getName() {
30 return name;
31 }
32
33 public void setPhoneNumber(String phoneNumber) {
34 this.phoneNumber = phoneNumber;
35 }
36
37 public String getPhoneNumber() {
38 return phoneNumber;
39 }
40 }
41
42 @Override
43 public void onCreate(Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState);
45 setContentView(R.layout.main);
46
47 ArrayList<Customer> customerListe = new ArrayList<Customer>(); // Liste nur für Auto-Objekte
48 Customer a1 = new Customer("Hans Müller", "111 222 33 44"); // Auto-Objekt erzeugen
49 Customer a2 = new Customer("Tamara Joschi", "222 333 44 55"); // Auto-Objekt erzeugen
50 Customer a3 = new Customer("Hans Ueli", "888 777 11 22"); // Auto-Objekt erzeugen
51
52 customerListe.add(a1);
53 customerListe.add(a2);
54 customerListe.add(a3);
55 customerListe.add(new Customer("Johannes Bachmann","222 333 44 22"));
56
57 TextView meintextfeld = (TextView) findViewById(R.id.textfeldoben);
58 meintextfeld.setText(customerListe.get(3).phoneNumber);
59 }
60}

Heute hab ich mir dann zum Ziel genommen dass ich diesen Code auf zwei Klassen verteilen möchte. Eine mit der ich die ArrayListe erstelle, eine in der ich sie dann brauche. Einer meiner Versuche lautet wie folgt:

customer.java:
1package pre.arraylist.two;
2
3import java.util.ArrayList;
4
5
6
7public class customer {
8 /** Called when the activity is first created. */
9
10 public class Customer {
11
12 private String name;
13 private String phoneNumber;
14
15 public Customer() {
16 }
17
18 public Customer(String name, String phoneNumber) {
19 this.name = name;
20 this.phoneNumber = phoneNumber;
21 }
22
23 public void setName(String name) {
24 this.name = name;
25 }
26
27 public String getName() {
28 return name;
29 }
30
31 public void setPhoneNumber(String phoneNumber) {
32 this.phoneNumber = phoneNumber;
33 }
34
35 public String getPhoneNumber() {
36 return phoneNumber;
37 }
38 }
39
40 public void dothelist() {
41
42 ArrayList<Customer> customerListe = new ArrayList<Customer>(); // Liste nur für Auto-Objekte
43 Customer a1 = new Customer("Hans Müller", "111 222 33 44"); // Auto-Objekt erzeugen
44 Customer a2 = new Customer("Tamara Joschi", "222 333 44 55"); // Auto-Objekt erzeugen
45 Customer a3 = new Customer("Hans Ueli", "888 777 11 22"); // Auto-Objekt erzeugen
46
47 customerListe.add(a1);
48 customerListe.add(a2);
49 customerListe.add(a3);
50 customerListe.add(new Customer("Johannes Bachmann","222 333 44 22"));
51
52 }
53}

startactivity:
1package pre.arraylist.two;
2
3import java.util.ArrayList;
4
5import pre.arraylist.two.customer.Customer;
6import pre.arraylist.two.customer.*;
7import android.app.Activity;
8import android.os.Bundle;
9import android.widget.TextView;
10
11public class startactivity extends Activity {
12 /** Called when the activity is first created. */
13
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18
19
20
21 pre.arraylist.two.customer.dothelist();
22
23 TextView meintextfeld = (TextView) findViewById(R.id.textfeldoben);
24 meintextfeld.setText(customerListe.get(3).phoneNumber);
25 }
26}

Dies ist wenigstens noch eine Variante mit weniger Fehlermeldungen innerhalb Eclipse. Es sagt mir z.B. in Zeile 27. der startactivity.java ("Cannot make a static reference to the non-static method dothelist() from the type customer". Wenn ich dann aber in der customer.java in Zeile 40 ein "static" hinzufüge, erhält der Code darunter eine Fehlermeldung. Ich habe wirklich schon einiges rumprobiert und auch versucht zu verstehen, leider ohne Erfolg.

Vielleicht kann mir jemand bei dem Problem helfen. Wenn ich eine Lösung habe verstehe ich das Problem vielleicht auch besser.

Danke und Gruss
Ralf

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.10.2010, 23:48:03 via Website

Wenn wir wüssten wo bei dir Zeile 27 wäre ...

PS: public class startactivity extends Activity ist falsch, in Java werden alle Klassen großgeschrieben, also StartActivity oder CustomerService, ebenfalls bei Methoden: doTheList() ... obwohl der Name nichts aussagt. createCustomerList() wäre besser. Deine Customer sind keine Autos (siehe deine Javadoc).

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

26.10.2010, 00:54:09 via Website

Mal ganz abgesehen von der "static" Prolematik greifst du in Zeile 23/24 der startactivity auf eine lokale Variable einer anderen Funktion in einer anderen Klasse zu.

Wenn du die Struktur so beibehalten willst (es wird ja einen Grund haben, das du den Code auf zwei Klassen verteilen möchtest), dann muß deine ArrayList erstmal ein static Member von customer werden (dann kannst du mit customer.customerListe darauf zugreifen).

Wenn du die Funktion dothelist() so benutzen willst, wie es dein Code andeutet, dann muß die Funktion ebenfalls static werden, wie du schon richtig erkannt hast; dann wird aber aus einem static Context auf die nicht-static (nested) Klasse Customer zugegriffen, also müsste diese Klasse ebenfalls static werden.

Vielleicht bringt dich das ja auf den richtigen Weg ;)


BTW: @Sven: wann bekommen wir einen ordentlichen Quelltext-Renderer fürs Forum? B)

Antworten
Ralf Züllig
  • Forum-Beiträge: 12

26.10.2010, 19:59:47 via Website

Genau, die Struktur so wie sie ist hat ihren Grund,...nämlich rein dass es etwas übersichtlicher wird und nicht alles in der Hauptklasse ist :grin:
Natürlich wäre der Code im richtigen Programm wo ich plane um einiges länger.

Also, aufgrund des Inputs habe ich folgendes gemacht:
- customer.java: Bei der Klasse (Zeile 10) und Methode (Zeile 40) je ein "static" gesetzt

Sieht auch schon ganz gut aus, nun hat nur noch Zeile 54 der startactivity.java einen Fehler: "customerListe cannot be resolved". Ok, dachte ich ich ändere das und zu:

1meintextfeld.setText(customer.customerListe.get(3).phoneNumber);

Die Fehlermeldung bleibt aber die gleiche. Ausserdem habe ich bemerkt das in der startactivity.java der Methodenaufruf in Zeile 40 nicht mehr aufgelöst wird. Vorher war sowohl die Klasse wie die Methode bunt, nun nur noch die Klasse. Und zwar seitdem ich die Methode auf static gesetzt habe. Vorher war die Fehlermeldung, nun keine mehr aber auflösen kann er das ganze nicht mehr :mad:

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

26.10.2010, 22:09:43 via Website

Sieht auch schon ganz gut aus, nun hat nur noch Zeile 54 der startactivity.java einen Fehler: "customerListe cannot be resolved". Ok, dachte ich ich ändere das und zu:

Ist soweit auch schon richtig, aber laut deinem Protokoll ist die Variable nach wie vor lokal zur Funktion onCreate();
lies nochmal den ersten Satz aus meinem ersten Posting - und dann den zweiten für die Lösung ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

26.10.2010, 22:43:10 via Website

Hallo Ralf,

Ohne Dir zu nahe treten zu wollen - das sind ja echt grundsätzliche Probleme der OOP und Java, die du hier hast. Vielleicht solltest du dich erstmal mit Java auf dem Desktop beschäftigen. Kauf Dir doch einfach ein gutes, anfängertaugliches Buch (ich empfehle Head first Java) und arbeite es durch. Auf die Art und Weise wirst du schneller zum Erfolg kommen...

Mit besten Grüssen,

Thomas

Antworten
Ralf Züllig
  • Forum-Beiträge: 12

26.10.2010, 23:21:54 via Website

and dev

Ist soweit auch schon richtig, aber laut deinem Protokoll ist die Variable nach wie vor lokal zur Funktion onCreate();
lies nochmal den ersten Satz aus meinem ersten Posting - und dann den zweiten für die Lösung ;)

Also die beiden Variablen name und phoneNumber habe ich auf public gesetzt. Und ich bin mir nicht ganz sicher was mit
dann muß deine ArrayList erstmal ein static Member von customer werden
gemeint ist, aber ich habe mal die ganze Methode dothelist() in die Klasse customer aufgenommen. Keinen Fehler mehr (positiv), aber auch sonst überhaupt keine Verbesserung. Die startactivity hat immer noch ihre Probleme mit dem Methodenaufruf und der customerListe.

— geändert am 26.10.2010, 23:22:21

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

27.10.2010, 00:43:46 via Website

Und ich bin mir nicht ganz sicher was mit

Du weißt, was eine lokale Variable ist?
Du weißt, was eine Membervariable ist?

Die "static" Änderungen hast du gemacht, weil ich das gesagt habe? Oder hast du verstanden, warum das erforderlich war?


ich habe mal die ganze Methode dothelist() in die Klasse customer aufgenommen. Keinen Fehler mehr (positiv)

Das kann nicht sein, es sei denn du hast noch etwas anderes gemacht (was du hier nicht erwähnt hast).

Mit welcher/welchen Programmiersprach(en) kennst du dich denn schon aus?
Vielleicht fällt es uns dann leicher zu verstehen, wo deine Verständnisprobleme liegen.

Antworten
Ralf Züllig
  • Forum-Beiträge: 12

27.10.2010, 17:20:54 via Website

Früher (Q)Basic, einige Websprachen wie HTML, PHP, etc.
Nach jahrelangem nichtstun dann anfangs Jahr viel mit Vbscript.

Keine richtigen OOP also bei denen man richtig mit Klassen und so arbeiten muss.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

28.10.2010, 01:14:16 via Website

Dann solltest du dir wirklich erstmal ein wenig Grundwissen aneignen - je nachdem wie du besser lernen kannst, entweder mit einem Buch oder anhand der unzähligen Tutorials, die man im Internet finden kann.

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

28.10.2010, 07:58:14 via Website

Hallo Ralf,

vielleicht ist ja hier etwas für Dich dabei, was Dir beim Erlernen weiterhilft:
Kostenlose Java Bücher

lg Voss

Antworten
Ralf Züllig
  • Forum-Beiträge: 12

30.10.2010, 16:26:21 via Website

Hier bin ich wieder, nachdem ich die letzten Tage stundenlang zum Thema Klassen gelesen habe. Das genannte "Grundwissen" habe ich bis zu einem gewissen Grad, trotzdem stehe ich noch an.

Erstmals habe ich den Code nun etwas bereinigt, d.h. Klassennamen gross geschrieben, Methoden klein.
Zweitens ist mir aufgefallen dass ich im ursprünglichen Code ganz unnötig (glaubs sogenannte) 'innere Klasse' gemacht habe. Das habe ich nun entfernt. Ausserdem habe ich sonst den Code ganz umgestellt und eine Methode welche die Kundenliste erst erstellt, habe ich ganz weggelassen. Denke eine solche Methode braucht es gar nicht. Derzeiger Versuch:

Kunde.java:
1package pre.arraylist.three;
2
3import java.util.ArrayList;
4
5public class Kunde {
6
7 public static String teststring = "Hallo";
8
9 public String name;
10 public String phoneNumber;
11
12 static {
13 ArrayList<Kunde> kundenListe = new ArrayList<Kunde>();
14 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
15 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
16 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
17 }
18
19 public Kunde() {
20 }
21
22 public Kunde(String name, String phoneNumber) {
23 this.name = name;
24 this.phoneNumber = phoneNumber;
25 }
26
27 public void setName(String name) {
28 this.name = name;
29 }
30
31 public String getName() {
32 return name;
33 }
34
35 public void setPhoneNumber(String phoneNumber) {
36 this.phoneNumber = phoneNumber;
37 }
38
39 public String getPhoneNumber() {
40 return phoneNumber;
41 }
42
43}

Startactivity:
1package pre.arraylist.three;
2
3import java.util.ArrayList;
4
5import pre.arraylist.three.Kunde;
6import pre.arraylist.three.R;
7import android.app.Activity;
8import android.os.Bundle;
9import android.widget.TextView;
10
11public class Startactivity extends Activity {
12 /** Called when the activity is first created. */
13
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18
19 TextView meintextfeld = (TextView) findViewById(R.id.textfeldoben);
20 meintextfeld.setText(Kunde.kundenListe.get(2).name);
21 }
22}

Was ich inzwischen gelernt habe ist Klassenvariablen und Objektvariablen (auch Instanzvariablen genannt) zu unterscheiden. In meinem Code wären als "name" und "phoneNumber" Objektvariablen und z.B. teststring eine Klassenvariable. Wenn ich in der Startactivity Zeile 20 von...

1meintextfeld.setText(Kunde.kundenListe.get(2).name);

zu...

1meintextfeld.setText(Kunde.teststring);

...ändere, klappt alles wunderbar. Das Textfeld erhält den Wert "Hallo". Analog wollte ich das halt mit der kundenListe machen, aber er kann die kundenListe nicht finden. Gut, der Unterschied ist ja das ich den teststring auf public gesetzt habe, aber:...

1static public {
2 ArrayList<Kunde> kundenListe = new ArrayList<Kunde>();
3 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
4 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
5 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
6 }
1static {
2 public ArrayList<Kunde> kundenListe = new ArrayList<Kunde>();
3 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
4 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
5 kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
6 }
1static {
2 public ArrayList<Kunde> kundenListe = new ArrayList<Kunde>();
3 public kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
4 public kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
5 public kundenListe.add(new Kunde("Johannes Bachmann", "222 333 44 22"));
6 }

...funktioniert alles nicht.

Ich habe es in einem anderen Code immerhin mal geschaft die Konstruktoren in einer anderen Klasse zu haben und korrekt aufzurufen. Der Versuch Konstruktoren und Kundenliste erstellen in einer fremden Klasse zu haben und dann auf die Kundenliste zuzugreifen scheitere ich nach wie vor :blink:

— geändert am 30.10.2010, 16:39:39

Antworten
Ralf Züllig
  • Forum-Beiträge: 12

30.10.2010, 17:45:13 via Website

    Nachdem ich den ganzen Nachmittag dran war, war ich grade unter der Dusche und da kam mir eine Idee die ich bisher noch nicht verfolgt habe. Doch wieder eine Methode zu machen, welche die Kundenliste baut, dieser Methode aber eben für diese Kundenliste einen Rückgabewert zu geben. In der Startactivity.java dann halt zuerst die Methode aufrufen und den Rückgabewert entgegen nehmen und dies wiederrum in einer Kundenliste übertragen. Hier der Code:

    Startactivity.java:
    1package pre.arraylist.three;
    2
    3import java.util.ArrayList;
    4
    5import pre.arraylist.three.Kunde;
    6import pre.arraylist.three.R;
    7import android.app.Activity;
    8import android.os.Bundle;
    9import android.widget.TextView;
    10
    11public class Startactivity extends Activity {
    12 /** Called when the activity is first created. */
    13
    14 @Override
    15 public void onCreate(Bundle savedInstanceState) {
    16 super.onCreate(savedInstanceState);
    17 setContentView(R.layout.main);
    18
    19 ArrayList<Kunde> kundenListeNeu = new ArrayList<Kunde>();
    20 kundenListeNeu = Kunde.createTheList();
    21
    22 TextView meintextfeld = (TextView) findViewById(R.id.textfeldoben);
    23 meintextfeld.setText(kundenListeNeu.get(2).phoneNumber);
    24 }
    25}

    Kunde.java:
    1package pre.arraylist.three;
    2
    3import java.util.ArrayList;
    4
    5public class Kunde {
    6
    7 public static String teststring = "Hallo";
    8
    9 public String name;
    10 public String phoneNumber;
    11
    12 public Kunde() {
    13 }
    14
    15 public Kunde(String name, String phoneNumber) {
    16 this.name = name;
    17 this.phoneNumber = phoneNumber;
    18 }
    19
    20 public void setName(String name) {
    21 this.name = name;
    22 }
    23
    24 public String getName() {
    25 return name;
    26 }
    27
    28 public void setPhoneNumber(String phoneNumber) {
    29 this.phoneNumber = phoneNumber;
    30 }
    31
    32 public String getPhoneNumber() {
    33 return phoneNumber;
    34 }
    35
    36 public static ArrayList createTheList() {
    37 ArrayList<Kunde> kundenListe = new ArrayList<Kunde>();
    38 kundenListe.add(new Kunde("Herbert Wolfgang", "222 333 44 22"));
    39 kundenListe.add(new Kunde("Johannes Bachmann", "111 333 44 22"));
    40 kundenListe.add(new Kunde("Daniel Dolores", "999 333 44 22"));
    41 return kundenListe;
    42 }
    43}

    Funktioniert trotz zwei Eclipse-Warnungen wunderbar.
    - Startactivity.java (Zeile 20): Type safety: The expression of type ArrayList needs unchecked conversion to conform to ArrayList<Kunde>
    - Kunde.java (Zeile 36): ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized

    Vielleicht kann mir ja bei den zwei Warnungen noch helfen.

    Wichtiger ist mir allerdings noch fast ein kleines Feedback, ob ich (jetzt da es läuft) im Ansatz wenigstens richtig bin oder etwas total verwogenes mache bei dem ich einfach das Glück habe dass es läuft. Bin eigentlich recht stolz selber auf die Lösung gekommen zu sein
    :grin:

    Edit:
    Ich habe inzwischen das im Internet häufig gefundene @SuppressWarnings("unchecked") vor meiner Methode in der Kunde.java gesetzt. Die Warnung bei der Methode ist verschwunden, die Warnung beim Methodenaufruf in der Startactivity.java aber noch nicht. Eigentlich habe ich genau das umgekehrte erwartet nachdem was ich gelesen habe.

    — geändert am 30.10.2010, 18:21:08

    Antworten
    Mac Systems
    • Forum-Beiträge: 1.727

    30.10.2010, 20:16:17 via Website

    Wenn du dir dieses unchecked warnings angewöhnst baust du im zweifelsfall einen Bug ein. Der Compiler gibt dir hier eine Warnung aus, das machen die alle nichtn zum Spass.

    Aus dem Bauch raus kannst du das folgendermassen ändern:

    1public static List<? extends Kunde> createTheList() {
    2// do your Stuff
    3}

    - Mac

    Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

    Antworten
    Ralf Züllig
    • Forum-Beiträge: 12

    30.10.2010, 20:28:34 via Website

    Ohne den Teil jetzt verstanden zu haben, habe ich meine Methode in der Klasse Kunde.java mit deinem Code ausgetauscht. In der Startactivity erscheint nun beim Methodenaufruf:

    Type mismatch: cannot convert from List<capture#1-of ? extends Kunde> to ArrayList<Kunde>

    Vielleicht habe ich ja nicht das gemacht was du eigentlich vorgesehen hattest, den der Teil List<? extends Kunde> verstehe ich wirklich nicht.

    Eventuell kann mir der Artikel http://de.wikipedia.org/wiki/Generische_Programmierung_in_Java etwas Aufschluss geben, denn soweit ich das beurteilen kann hängt es damit zusammen was du meinst, oder?

    — geändert am 30.10.2010, 20:43:40

    Antworten
    Ansgar M
    • Forum-Beiträge: 1.544

    30.10.2010, 21:05:08 via Website

    Hey,
    ich lern das auch grad, und wenn du der englischen Sprache mächtig bist, dann kann ich dir "The New Boston" empfehlen, da gibt es Videotutorials zum Anfang.. Ist sehr einfaches Englisch und er erklärt es sorgfältig..
    Lg Ansgar
    edit: Da gibt es auch eins mit dem Titel: "Public, Private and This"

    — geändert am 30.10.2010, 21:07:39

    Antworten
    Mac Systems
    • Forum-Beiträge: 1.727

    30.10.2010, 21:12:39 via Website

    Ich weiss woran das liegt, du musst entweder ein




    ArrayList<? extends Kunde> nutzen, allerdings ist sowas unflexibel, List ist besser da es das Interface ist. Auch wenn Google was anders erzählt, wegen Nutzung von Interfaces gegenüber Klassen habe Ich keine Performance Einbussen erlebt. Besser schlau Programmieren als das der Code nicht zu Pflegen ist.

    Du müsstest also in deinem Code, wo du die ArrayList deklarierst folgendes schreiben:

    List<Kunde> bla = new ArrayList<Kunde>();

    PS: Programmieren lernt man durch Programmieren, keine sorge, das wird schon!


    hth,
    mac

    — geändert am 30.10.2010, 21:16:07

    Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

    Antworten
    Ralf Züllig
    • Forum-Beiträge: 12

    31.10.2010, 11:15:36 via Website

    Um mich noch kurz selber zu korrigieren, ich weiss jetzt warum das mit dem @SuppressWarnings("unchecked") nur bei der Klasse Kunde.java ging und nicht bei der StartActivity.java. Ich habe es dort schlichtweg am falschen Ort gesetzt, und zwar direkt vor der Instanziierung eines neuen Objects, also direkt vor der Zeile wo die Warnung ausgibt. Die Annotations müssen aber immer vor einer Methode stehen, für welche die Unterdrückung dann halt gesamthaft gilt. Also habe ich somit beide Warnungen wegbekommen, auch wenn Forumsmitglied Mac Systems schon recht hat über den Sinn der Warnungen.
    Mac Systems

    PS: Programmieren lernt man durch Programmieren, keine sorge, das wird schon!
    mac

    Endlich mal ein wahres Wort :-). Ich begreife viel besser durch Beispiele, als wenn ich mich versuche schlau zu lesen und ständig über noch mehr Fremdbegriffe stolppere. Beim Autofahren lernen ist dass doch nicht anders, Übung macht den Meister. Es gibt halt solche Menschen die lernen sich zuerst die Theorie an und gehen dann zur Praxis über - mir fällt es leichter aus der Praxis die Theorie abzuleiten. Wenn ich aktiv was ändere und dann die Auswirkung sehe (bsp. wie eben oben beschrieben nur das verschieben der Annotation an den richtigen Ort), dann bleibt mir das. Hätte ich umgekehrt zuvor irgendwann mal in der Theorie gelesen dass eine Annotation vor der Methode stehen muss, dann hätte ich es a.) entweder gar nicht verstanden b.) bis zum Zeitpunkt wo ich es das erste mal gebraucht hätte schonwieder vergessen ;-)

    Antworten
    Mac Systems
    • Forum-Beiträge: 1.727

    31.10.2010, 15:29:48 via Website

    Die Annotations müssen aber immer vor einer Methode stehen, für welche die Unterdrückung dann halt gesamthaft gilt.

    Das stimmt so nicht. Du kannst dir sogar selbst welche schreiben. Im Umfeld von Datenbanken wird so was gerne genutzt (Hibernate z.b).
    Das würde unter Android allerdings in 99% der Fälle als "overkill" gelten. Dennoch kann so was nützlich sein solange man es zur Compilezeit
    auswertet. Aber das geht jetzt zu weit vom Thema weg.

    - Mac

    Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

    Antworten