136 votes

Comment lancer Liste<Object> à Liste<MyClass>

Cela ne compile pas, aucune suggestion appréciée.

 ...
  List<Object> list = getList();
  return (List<Customer>) list;

Le compilateur dit : ne peut pas lancer List<Object> à List<Customer>

41voto

Bozho Points 273663

Selon votre autre code, la meilleure réponse peut varier. Essayez :

List<? extends Object> list = getList();
return (List<Customer>) list;

ou

List list = getList();
return (List<Customer>) list;

Mais gardez à l'esprit qu'il n'est pas recommandé de faire de tels lancers non contrôlés.

41voto

roundar Points 1165

Avec Java 8 Streams :

Parfois, la coulée à force brute est très bien :

List<MyClass> mythings = (List<MyClass>) (Object) objects

Mais voici une solution plus polyvalente :

List<Object> objects = Arrays.asList("String1", "String2");

List<String> strings = objects.stream()
                       .map(element->(String) element)
                       .collect(Collectors.toList());

Il ya une tonne d'avantages, mais l'un est que vous pouvez lancer votre liste plus élégamment si vous ne pouvez pas être sûr de ce qu'il contient :

objects.stream()
    .filter(element->element instanceof String)
    .map(element->(String)element)
    .collect(Collectors.toList());

37voto

Brian Agnew Points 143181

En effet, bien qu'un client soit un objet, une liste de clients n'est pas une liste d'objets. Si c'était le cas, vous pourriez mettre n'importe quel objet dans une liste de clients.

29voto

Peter Lawrey Points 229686

Vous pouvez utiliser un double casting.

return (List<Customer>) (List) getList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X