Toon posts:

[java] class.forName in samenwerking met generics.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Het punt van een generic methode is dat je een type meegeeft waarop de methode moet worden toegepast. Het "probleem" is dat dit type op voorhand moet gekend zijn.
voorbeeld:
Java:
1
List<Customer> list = Repository.match(Customer.class,1);


Stel, je weet alleen je class naam. Die word als parameter doorgegeven als een string.
Java:
1
2
3
4
5
String className ="....";
List<className> list; //gaat natuurlijk niet

Class klass = class.forName(className);
List <klass> // gaat ook niet.


Is het een eutopie dat dit ooit zal werken?
(classnames zitten in xml bestand dus, bepaald door gebruiker. Ik weet alleen dat ze allemaal verplicht moeten overervern van één gezamelijke klasse die wel bekend is.)

Misschien heeft het iets te maken met "<?> " dat vaak bij generics wordt gebruikt. Dit deel versta ik precies nog niet zo goed. Misschien moet ik daar zoeken?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Generics in Java zijn na het compilatie proces verleden tijd. Oftewel.. de virtual machine ziet geen verschil tussen code met en zonder generics.

De type parameters worden stiekum wel bijgehouden in een attribuut in de classcode zodat je later bij een jar/class file wel kunt zien wat er geparametriseerd moet worden.

Zie:
http://today.java.net/pub...3/12/02/explorations.html en dan naar Erasure springen

Oja.. En verder is jouw klass geen class, maar een object :P En daarmee kan je niet parametriseren.

[ Voor 11% gewijzigd door Alarmnummer op 08-12-2004 08:20 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 16:06
Verwijderd schreef op woensdag 08 december 2004 @ 03:06:
Het punt van een generic methode is dat je een type meegeeft waarop de methode moet worden toegepast. Het "probleem" is dat dit type op voorhand moet gekend zijn.
Is dat niet juist de bedoeling met het gebruik van generics?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

TukkerTweaker schreef op woensdag 08 december 2004 @ 12:23:
[...]


Is dat niet juist de bedoeling met het gebruik van generics?
Wat hij wil is runtime type parametrisatie te gaan uitvoeren en dat is zinloos omdat (bij Java) runtime niets met type parameters wordt gedaan. Voor de virtual machine is een List<Integer> exact hetzelfde als List.

[ Voor 3% gewijzigd door Alarmnummer op 08-12-2004 12:28 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wellicht
Java:
1
2
3
4
private void function(Class<T> clazz)
{
    List<T> list ...;
}