Autor Thema: Integer Object  (Gelesen 4300 mal)

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Integer Object
« am: 26.07.03 - 22:26:58 »
Hi,

die replaceItemValue methode der notesDocument class erwartet als value ein object.

Aus der Hilfe:
Integer intObj = new Integer(202)
soweit ist mir das klar meine Frage dazu wie kann ich denn den Wert von dem intObj später nach dem erstellen ändern ???
Ich möchte in einer schleife in der ich mehrer docs durchlaufe nicht jedesmal ein neues intobj erstellen.

Gruß
qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Integer Object
« Antwort #1 am: 26.07.03 - 23:49:11 »
soweit ist mir das klar meine Frage dazu wie kann ich denn den Wert von dem intObj später nach dem erstellen ändern ???
gar nicht. java.lang.Integer gehört genauso wie javal.lang.Long, java.lang.Float, etc. zu den sogenannnten Wrapper-Klassen (für primitive Datentypen). Diese Wrappers sind inmutable (unveränderlich, können ihren Wert nicht ändern).
Wenn du in einer Schleife immer einen neuen Wert zuweisen würdest, hättest du auch komische Effekte.
Code
Integer intSoGehtsNicht = new Integer(3);
DocumentA.setItemValueInteger("feld"; intSoGehtsNicht);
intSoGehtsNicht.add(1); // Methode frei von mir erfunden, geht nicht s. inmutable 
DocumentB.setItemValueInteger("feld"; intSoGehtsNicht);
// in diesem Fall hätte nun auch theoretisch in DocumentA das Feld auf den Wert 4 gesetzt werden. (wie gesagt das geht nicht, weil inmutable). 

Java geht mit den primitiven Datentypen wie
Code
int i = 4;
float i = 2.0f;
double d = 2.0;
short s = (short) 4;
// etc.  
einen Kompromiß gegen die Objekt-Orientierung ein, den es so in SmallTalk oder wenn ich mich recht erinnere auch in C# nicht gibt. Die primitiven werden nicht im Heap, sondern in öhem (nicht so sicher) Registern. Das bringt leichte Performance-Gewinne. Wichtiger für diese Design-Entscheidung von den Sprachkonzipierern war es aber, den Einstieg in die Sprache für nicht OO-Leute zu erleichtern.

Ich möchte in einer schleife in der ich mehrer docs durchlaufe nicht jedesmal ein neues intobj erstellen.
Das mußt du aber und ist auch nicht so schlimm. Ein Integer-Objekt nimmt nur sehr wenig Heap-Speicher in Anspruch.

Ich würde das in deiner Schleife das ungefähr so schreiben:
Code
for (int i = 0; i < 5; i++) {
   DocumentA.setItemValueInteger("feld"; new Integer(i));
/* das wäre gewissermassen aus Sicht deines Agenten ein "anonymes Objekt". Ein Objekt, das keiner Instanzvariable zugewiesen ist. Zumindest nicht in deinem code, was das (Notes)Document-Objekt intern damit macht, ist natürlich eine andere Frage, aber im Prinzip auch für dich nicht so wichtig. */
}

Du könntest auch auf die Idee kommen das so zu machen:
Code
Integer myInt = null;
for (int i = 0; i < 5; i++) {
    myInt = new Integer(i);
   DocumentA.setItemValueInteger("feld"; myInt);
}
Damit würdest du aber genauso viele Objekte erzeugen wie im Beispiel davor, nur eben immer die gleiche Objekt-Referenz verwenden. Heap-Speicher spart man so nicht. Eine begriffliche Trennung zwischen Variable und Objekt ist IMHO wichtig. Die Variable (also myInt) hält nur eine Referenz auf das Objekt. Das Objekt liegt irgendwo als 0 und 1 im Heap-Speicher vor.  
Um vom Integer-Objekt den int Wert zurückzubekommen, geht einfach:
Code
Integer myInt = new Integer(4);
int val = myInt.intValue();

Benutze nicht die Notes-Dokumentation. Besorg dir besser dieses Teil:
http://java.sun.com/j2se/1.4.2/docs/api/index.html
Würd mir auch direkt die 1.4.2-Api-Doc runterladen. Notes hat zwar nur 1.3. Aber:
1. wird das im Api-Doc gekennzeichnet, wenn eine Klasse/Methode nur in 1.4 vorhanden ist. Und die Chance das du von den 10.000 oder so Klassen eine erwischst, die es erst ab 1.4 gibt, sehr gering (hört sich komisch an, ist aber so).
Hier ist link für download:
http://java.sun.com/j2se/1.4.2/download.html#docs
Wenn du schon mal dabei bist, kannst du gleichzeitig auch das hier downloaden:
http://java.sun.com/docs/books/tutorial/information/download.html
(einfach tutorial.zip. Das Rest der da noch angeboten wird, sind nur Teilmengen von tutorial.zip).
(dort wo j2se v1.4.2 Documentation steht.
Im downgeloadeten Zeug gibt es dann ein File Index. Das öffnen. Dann auf 1. Link hinter Api & Language Documentation. Das dann bookmarken.

Jeder hat dieses Teil und nach einer gewissen Eingewöhnungszeit ist es sehr übersichtlich. Java lebt von seiner groooßen Klassenbibliothek.

Gruß Axel
 
(weitere Infos in Kapitel 10.2 des Handbuchs der Javaprogrammierung --> www.javabuch.de, freies e-book).
« Letzte Änderung: 27.07.03 - 00:41:03 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Integer Object
« Antwort #2 am: 28.07.03 - 20:13:05 »
Danke
Gruß
Sven

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz