generisches Brett vorm Kopf: (List<Object>) List<My

Status
Nicht offen für weitere Antworten.

Tobias

Top Contributor
Hi,

ich habe eine Methode, die List<MyClass> zurückgibt. Diesen Rückgabewert will ich in einer als List<Object> deklarierten Variable speichern, da in diese Liste später auch andere Werte (Doubles und Strings) geschrieben werden sollen. Ich hab aber momentan so ein dickes Brett vom Kopf, das ich das nicht hinkriege... Wer kann helfen?

Hier noch mal Code zur Visualisierung:

Code:
public List<MyClass> doSomething() {
    // Macht was
}

public Object doSomethingOther(List<Object> list) {
    // Macht was anderes
}

public static void main(String[] args) {
    doSomethingOther(doSomething());
}

mpG
Tobias
 

FelixB

Bekanntes Mitglied
jetzt hab ich ebenfalls ein Brett vorm Kopf. Ich sehe nicht, was da nicht funktioniert, keine Fehlermeldung oder Fehlerbeschreibung.

wie wärs mit

Code:
List<Object> list = (List<Object>) doSomething();
doSomethingOther(list);


eigentlich eine Klasse nciht explizit zu Object gecastet werden, aber bei List<Object> ist das evtl anders?
 

Tobias

Top Contributor
Ups, sorry, vergessen:

The method doSomethingOther(List<Object>) in the type XY is not applicable for the arguments (List<MyClass>).

mpG
Tobias
 

Tobias

Top Contributor
Mit einfach Referenzen verbiegen und explizit casten hab ich schon probiert, das ist es nicht...

mpG
Tobias
 

norman

Top Contributor
Code:
doSomethingOther(List list)

lass die generics halt an dieser stelle weg. wenn du alles mögliche in die list haust, sind die eh nutzlos.
 
B

Beni

Gast
Eine "List<MyClass>" darf nur MyClass-Objekte drin haben, und keine Doubles, Strings oder sonstwas.

Benutz überall eine "List<Object>", wenn du dir nicht sicher sein kannst, dass die Liste "rein" ist.
 

HoaX

Top Contributor
einfach die methode als
Code:
doSomethingOther(List<? extends Object>)
deklarieren
 

Tobias

Top Contributor
@Beni: Bis zur Übergabe der Liste an doSomethingOther() ist die Liste eine reine MyClass-Liste. Erst in dieser letzten Funktion wird es etwas "schmutzig". Es handelt sich um alten 1.4er-Code, der jetzt nachträglich refactort und aufgebohrt wird...

@HoaX: Dann gibt es Probleme mit:

Code:
Object res = foobar();
list.set(3, res);

wobei list die übergebene List<? extends Object> sei. Die Fehlermeldung dazu lautet:

The method set(int, capture-of-? extends Object) in the Type List<capture-of-? extends Object> is not applicable for the arguments (int, Object).

Bisher funktioniert die Lösung von norman am Besten, ist aber unschön, da sie ein @SupressWarnings("unchecked") erzwingt.

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben