Lineare Liste mit Vector

Hallo miteinander. ich versuche eine lineare Liste mit Objekten verschiedener Klassen zu erstellen- ich dachte mir das Vector die richtige Klasse dazu wäre.
Sobald ich aber Objekte zu einer Liste hinzufügen will kommt der Fehler:

Note: Benutzer.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

und das Programm startet nicht oder stürtzt an gegebener Steller ab. Hier ein kleines Beispiel um die Problematik zu verdeultlichen.

import java.util.*;

public class Benutzer
extends Object
{
Vector folge = new Vector();

public Benutzer()
{
this(„Peter“);
}

public Benutzer(String first)
{
super();
folge.addElement(first);
}
}

Hallo,

Dein Problem ist, dass Du die beiden Konstruktoren gegenseitig aufrufst.

Benutzer(String) ruft Benutzer() auf und umgekehrt. Das darf natürlich nicht sein.

Mit dem Vektor hat das gar nichts zu tun.

Viele Grüße

Peter

hallo peter, danke für die schnelle antwort.
daran liegt es aber nicht. das ist so die programmierart die ich von der Uni gewöhnt bin und nicht das Problem. Lass ich das weg geht es immer noch nicht.

import java.util.*;

public class Benutzer
extends Object
{
Vector folge = new Vector();

public Benutzer()
{
super();
String name = new String(„Peter“);
folge.addElement(name);
}

}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Benutzer(String) ruft Benutzer() auf und umgekehrt. Das darf
natürlich nicht sein.

Falsch, Benutzer(String) ruft Benutzer() auf, und Benutzer() ruft den Konstruktor von Object() auf.

Hi Ramin,

dein Code selber ist (sorry) Spaghetti-Code, lesbarer ist er erstmal so:

package my.package;

import java.util.Vector;

public class Benutzer
{
Vector folge = new Vector();

public Benutzer()
{
folge.addElement(„peter“);
}
}

Dieses Snippet, genauso wie auch dein Snippet, sollte eigentlich reibungslos laufen. Nur verstehe ich überhaupt nicht, was du damit bezwecken willst, vielleicht willst du alle erzeugten Benutzer abspeichern, dann muesste das so aussehen:

package my.package;

import java.util.Vector;

public class Benutzer
{
private String _name = null;
private static Vector _alle_benutzer = new Vector();

public Benutzer(String name)
{
_name = name;
_alle_benutzer.addElement(this);
}
}

Egal, wenn du weitere Hilfe brauchst, musst du mal deine Java Version posten, und genauer beschreiben, was passiert (wo genau stürzt es ab, detailliertere Fehlermeldung).

Gruesse,
uwe

Hallo,

natürlich hast Du Recht. Mein Fehler. Ich hab mal nachgeschaut:

  1. Wenn ich den identischen Code in meinem Eclipse laufen lasse, läuft er. Wenn ich javac benutze, bekomme ich dieselbe Warnung.

  2. Die Fehlermeldung ist wirklich nur eine Warnung. Das Programm läuft. (Wenn man die main-Methode dazutut)

  3. It’s not a bug, it’s a feature. Der Tiger hat zugeschlagen. Schu mal bei Google unter java unchecked call und Du hast die Antwort, warum das so sein soll.

Viele Grüße

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hey Uwe,
ja mein Original-Code ist wirklich anders, aber da ich wegen dem Fehler erstmal den Umgang mit der Vector Klasse ausprobieren wollte.

import java.util.Vector;

public class Benutzer
{
private String _name = null;
private static Vector _alle_benutzer = new Vector();

public Benutzer(String name)
{
_name = name;
_alle_benutzer.addElement(this);
}
}

Dieser Code führt exakt zur selben Fehlermeldung. liegt es vielleicht
am Java-Editor?
Außerdem was wird denn da zu _alle_benutzer hinzugefügt, _name?

Hallo Ramin,

du benutzt offensichtlich JAVA 5. Mit JAVA 5 sind Generics eingeführt (vergleichbar mit Templates aus C++). Vor JAVA 5 gab es keine Generics. Damit war Dein Code in Ordnung.
Vector konnte beliebige Objekte vom Typ Object speichern. Da Object die Mutter aller Klassen ist, konnten damit - wie schon geschrieben - alle Klassen (bzw. Objekte) in Vector gespeichert werden.

Nun gibt es Generics. Theoretisch sollte der Code wie folgt abgeändert werden:

Ersetze: private static Vector _alle_benutzer = new Vector();
durch: private static Vector _alle_benutzer = new Vector();

Damit sagtst Du, dass _alle_benutzer ein Veetor von Benutzer Objekten ist.

 import java.util.Vector;

public class Benutzer
{
 private String \_name = null;
 private static Vector \_alle\_benutzer = new Vector();

 public Benutzer(String name)
 {
 this.\_name = name;
 this.\_alle\_benutzer.addElement(this);
 }
}

Dieser Code führt exakt zur selben Fehlermeldung. liegt es
vielleicht am Java-Editor?

Mit obigen Code sollte es jetzt funktionieren. Begründung: siehe oben.

Außerdem was wird denn da zu _alle_benutzer hinzugefügt,
_name?

Nein. Es wird im Konstruktor this hinzugefügt. this ist das aktuelle Objekt. Also genau der Benutzer. Wenn Du den Namen des Benutzers hinzufügen möchtest, dann musst du Vector zu Vector ändern und _alle_benutzer.addElement(this); zu _alle_benutzer.addElement(_name);

BTW. _alle_benutzer ‚lebt‘ in der Klasse. ‚_name‘ lebt im Objekt. D.h. alle Objekte der Klasse Benutzer haben Zugriff auf das selbe _alle_benutzer.

Gruß,
Frank

Perfekt, vielen Dank.
Deshalb wohl Vector, wobei ich mir das nicht erklären konnte und jetzt ein bischen durchschauhe

Hallo Ramin,

du benutzt offensichtlich JAVA 5. Mit JAVA 5 sind Generics
eingeführt (vergleichbar mit Templates aus C++). Vor JAVA 5
gab es keine Generics. Damit war Dein Code in Ordnung.
Vector konnte beliebige Objekte vom Typ Object speichern. Da
Object die Mutter aller Klassen ist, konnten damit - wie schon
geschrieben - alle Klassen (bzw. Objekte) in Vector
gespeichert werden.

Nun gibt es Generics. Theoretisch sollte der Code wie folgt
abgeändert werden: