[Java] Generics + Overerving

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Java:
1
2
3
4
5
6
7
8
9
10
Class A {}

Class B extends A {}

private Collection< B > foo; //word wel ergens geintialiseerd

public Collection< A > getAll()
{
   return foo;
}


geeft
Type mismatch: cannot convert from Collection<B> to Collection<A>
Waarom is dit? B erft over van A en dus (volgens mij) is een verzameling van B's een verzameling van A's

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:05

RayNbow

Kirika <3

Dit is waarom het niet kan:
Java:
1
2
3
4
5
6
7
List<Integer> listIntegers = new ArrayList<Integer>();
List<Number> listNumbers;

listNumbers = listIntegers; // subtype relation?

listNumbers.add(new Float(3.2));
Integer newInteger = listIntegers.get(0); // unsafe!


Adding Wildcards to the Java Programming Language

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
qanar schreef op dinsdag 26 januari 2010 @ 17:54:
Waarom is dit? B erft over van A en dus (volgens mij) is een verzameling van B's een verzameling van A's
Je intuïtie klopt, mits er covariantie gold voor generieke types. De problemen die dan op kunnen treden worden al genoemd door RayNbow.
Arrays zijn trouwens wel covariant in Java.

Acties:
  • 0 Henk 'm!

  • ThaNOD
  • Registratie: Februari 2005
  • Laatst online: 17-03 14:04
Java:
1
2
3
4
5
6
7
8
9
10
Class A {}

Class B extends A {}

private Collection< B > foo; //word wel ergens geintialiseerd

public Collection< ? extends A > getAll() 
{
   return foo;
}


zo zou het wel moeten lukken. Je kan nu via get(); objecten van het type A uit de collectie halen maar je kan er niets in stoppen.