MudGuard: Generischer Vektor in abstrakter Klasse ...

Beitrag lesen

Hi,

In einer abstrakten Klasse habe ich folgendes Member samt setter:

class AbstractVectorHolder
{
  protected Vector<?> allData;

public void setData(Vector<?> data)
  {
    allData = data;
  }

//... der Rest, der für's Problem irrelevant ist.
}

Dazu eine Instanz einer abgeleiteten Klasse, diese soll eine Methode zum Hinzufügen eines Elements zum Vektor haben:

class OneVectorHolder extends AbstractVectorHolder
{
//  public void addRow(WasAuchImmer obj)
//  {
//    allData.add(obj);
//  }

//hier noch mehr kram, der für's Problem irrelevant ist
}

Irgendwo (wo spielt keine Rolle für's Problem) wird dann

OneVectorHolder instanz = new OneVectorHolder();
Vector<WasAuchImmer> data = getVectorOfWasAuchImmer();
instanz.setData(data);

gemacht. Klappt einwandfrei.

Leider kommt jedoch, wenn ich die addRow-Methode reinnehme, die Fehlermeldung
The method add(capture-of ?) in the type Vector<capture-of ?> is not applicable for the arguments (WasAuchImmer)
in der Zeile mit dem allData.add(obj).

Ich hab's mit diversen Casts probiert (z.B: allData.add((Object) obj); ), leider bekomme ich das nicht übersetzt.

Das einzige, was funktioniert, ist
((Vector) allData).add(object);
also ein Cast des Vektors.

Vector<?> sollte doch eigentlich ein Vektor beliebigier Objekte sein, insofern verstehe ich nicht, wieso
allData.add(obj); oder allData.add((Object) obj); nicht funktionieren.

Kann mir das jemand erklären?

Gibt es eine Variante, bei der nur das obj gecastet wird, nicht der ganze Vector?
Oder gar eine Variante ganz ohne Cast?

WasAuchImmer ist dabei irgendeine Klasse, spielt keine Rolle.

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.