Toon posts:

[Java] doorgeven van classes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hier:
PrintServiceAttribute getAttribute(Class category).

Maar hoe moet ik dat nu gebruiken? Met gebruiken bedoel ik dan "Class category" doorgeven...

Want als ik doe:
Java:
1
2
3
4
PrintService [] ps;
PrintServiceAttribute psa = ps[i].getAttribute(MediaTray);
of
PrintServiceAttribute psa = ps[i].getAttribute( javax.print.attribute.standard.MediaTray );


Dan krijg ik de foutmelding:
symbol : class standard
location: package javax.print.attribute
PrintServiceAttribute psa = ps[i].getAttribute( javax.print.attribute.standard.MediaTray );
of
symbol : variable MediaTray
location: class javaapplication4.Main
PrintServiceAttribute psa = ps[i].getAttribute( /*javax.print.attribute.standard.*/MediaTray );

Mijn probleem zit hem er dus in dat ik niet weet hoe ik "Class" moet doorgeven in Java... Kan er mij eventjes iemand wijzen hoe ik die moet doen?


Thx!

**EDIT**
De definitie van de functie is:
PrintServiceAttribute getAttribute(Class category)

[ Voor 7% gewijzigd door Verwijderd op 13-11-2004 09:19 ]


  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

een class object kun je krijgen door .class achter de classname te plakken,
Java:
1
PrintServiceAttribute psa = ps[i].getAttribute(MediaTray.class);

of m.b.v. Class.forName
Java:
1
2
Class c = Class.forName("MediaTray");
PrintServiceAttribute psa = ps[i].getAttribute(c);

en als je een instantie hebt van de class kun je ook de getClass() method aanroepen.

[ Voor 4% gewijzigd door nxt op 13-11-2004 10:26 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Vermijdt forName(), gebruik alleen .class en getClass().

[ Voor 62% gewijzigd door Macros op 13-11-2004 11:25 . Reden: Oops, zag die laatste regel van je niet :) ]

"Beauty is the ultimate defence against complexity." David Gelernter


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

Alarmnummer

-= Tja =-

Macros schreef op zaterdag 13 november 2004 @ 11:24:
Vermijdt forName(), gebruik alleen .class en getClass().
Het ligt eraan... soms moet je op basis van een string een instantie maken van een bepaalde class en dat is forName toch wel erg handig.

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 09:53

bloody

0.000 KB!!

Alarmnummer schreef op zaterdag 13 november 2004 @ 12:09:
[...]

Het ligt eraan... soms moet je op basis van een string een instantie maken van een bepaalde class en dat is forName toch wel erg handig.
Maar dit heeft _NIETS_ te maken met het probleem van TS :P.

nope


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

Alarmnummer

-= Tja =-

bloody schreef op zaterdag 13 november 2004 @ 13:05:
[...]
Maar dit heeft _NIETS_ te maken met het probleem van TS :P.
De message was ook gericht naar Macros en zijn ongenuanceerde opmerking.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Ik zeg toch niet dat je het nooit mag gebruiken. Ik zeg alleen dat je het zoveel mogelijk moet vermijden.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Nuttige achtergrondinformatie in die discussie, is de reden waarom je het wilt vermijden en de reden waarom je het toch zou willen doen.

Reden om Class.forName-constructie te vermijden is foutgevoeligheid. Als je de mogelijkheid hebt om de compiler een fout op te laten sporen, dan verdient dat de voorkeur boven trial-and-error runnen en testen. Fouten in het string argument van de forName method blijven onopgemerkt. Een typefoutje in ClassName.class, daar valt de compiler over en is snel gevonden.

Extra reden om Class.forName-constructie te vermijden: als je ClassName wijzigt in een moderne IDE als Eclipse of IDEA, dan wijzigen referenties daaraan automatisch mee. Het string-argument van de Class.forName method wijzigt (zeer waarschijnlijk - of ik onderschat de IDE's) niet mee.

Wanneer wel Class.forName gebruiken? Bij voorkeur alleen wanneer je software schrijft waarbij de naam van de class tijdens het compileren nog niet bekend is of kan zijn. Denk aan het laden van een plugin.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Ook een nadeel van Class.forName() is dat je er try{}catch(){} omheen moet zetten. Wat weer extra complexiteit brengt.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Verwijderd schreef op zondag 14 november 2004 @ 16:27:
Het string-argument van de Class.forName method wijzigt (zeer waarschijnlijk - of ik onderschat de IDE's) niet mee.
offtopic:
Je onderschat in elk geval Eclipse. Je kunt bij het Renamen de optie "Update textual matches" aan zetten (3x raden wat dat doet), moet je alleen wel eerst de voorgestelde veranderingen previewen
Pagina: 1