Toon posts:

[JAVA] String invoer methode laten activeren

Pagina: 1
Acties:
  • 154 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Is er een een optie in java die een string om kan zetten naar een methode bijv.
als je de invoer "sampleMethod()" hebt dat dan de methode sampleMethod() word geactiveerd.
Uiteindelijk wil ik dit gebruiken in een hashMap dat als je bijv. put("bla", "sampleMethod()") en dan HashMap.get("bla") de methode sampleMethod() word geactiveerd dus als er al een package is die het op zon manier kan doen zou dat handig zijn. Ik hoop dat ik het duidelijk genoeg geformuleerd heb.

bvd

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 07-04 22:56

TeeDee

CQB 241

Serializen?
edit:
Voortaan beter lezen...


Reflection inderdaad ;)

[ Voor 88% gewijzigd door TeeDee op 20-02-2006 17:12 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Dat heet "reflection" :)

  • Jeldert
  • Registratie: Juni 2001
  • Niet online

Jeldert

Rozijntjes

Java:
1
2
3
if (input.equals("sampleMethod()")) {
    sampleMethod();
}


Of denk ik te simpel?

Juist


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Is "sampleMethod()" een verwijzing naar een reeds bestaande methode? Zo ja, dan kun je gebruik maken van reflection. Anders kun je wellicht gebruik maken van een scripting framework als BeanShell (java als script-taal).

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • momania
  • Registratie: Mei 2000
  • Laatst online: 10:30

momania

iPhone 30! Bam!

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html

Hiermee kan je dus via reflection alle informatie ophalen die je nodig hebt :Y)

Neem je whisky mee, is het te weinig... *zucht*


  • arnout2
  • Registratie: September 2005
  • Laatst online: 15-12-2024
Kijk eens naar de java.lang.reflection package. Deze is in staat om je classes uit te pluizen, methoden op te vragen (ook op naam, zoals u dat wil) en deze dan ook uit te voeren.

API:
http://java.sun.com/j2se/...lect/package-summary.html

edit: spuit 11

[ Voor 5% gewijzigd door arnout2 op 20-02-2006 17:16 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:53

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het kan idd met reflection, maar daar lijkt me dit niet echt voor bedoeld. Er zijn veel nettere methode om 'callbacks' te gebruiken die geen reflection nodig hebben. Definieer een interface (bijvoorbeeld NumberProvider) met een enkele methode die het type retourneert dat jij wilt hebben, implementeer die interface voor de verschillende functies die zo'n waarde op moeten leveren, en stop de instanties daarvan in de hashmap. Na het ophalen uit de hashmap kun je vervolgens gewoon zelf die methode aanroepen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
ok bedankt dit helpt al een hoop.
btw dat ifje is idd te simpel gedacht zover was ik ook al wel dat dat kan alleen als je dan een lijst met methodes hebt dan heb je 10000 ifjes onderelkaar

  • __fred__
  • Registratie: November 2001
  • Laatst online: 04-04 08:56
misschien nodeloos om te zeggen, maar .oisyns methode is ook nog eens VELE malen sneller dan reflection, dat heeft dus duidelijk de voorkeur.

mischien interessant: http://jga.sourceforge.net/

[ Voor 16% gewijzigd door __fred__ op 20-02-2006 20:34 ]


Verwijderd

__fred__ schreef op maandag 20 februari 2006 @ 20:29:
misschien nodeloos om te zeggen, maar .oisyns methode is ook nog eens VELE malen sneller dan reflection, dat heeft dus duidelijk de voorkeur.
1. snelheid als argument is imo een foute, design komt op de eerste plaats
2. niemand weet hier het uiteindelijke doel van TS
3. .oisyns' implementatie heeft het nadeel dat je zelf methode namen moet verzinnen (mappings)

Dus wat om nou een methode boven de ander te stellen vind ik wat ver gaan. Ik kan me namelijk ergens voorstellen dat de noodzaak voor reflectie/mappings zijn oorsprong vind aan een wellicht niet zo'n handig ontwerp.

Tevens kun je in dit geval gebruik maken van beide methodieken. Voordeel is dat je dan een willekeurige class, dus niet interface gebonden, kunt mappen. Behoud van snelheid en flexibiliteit. Overkill in design? wellicht.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:53

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 20 februari 2006 @ 22:49:
3. .oisyns' implementatie heeft het nadeel dat je zelf methode namen moet verzinnen (mappings)
Java mist idd delegates. Maar delegates zijn dan wel weer te implementeren middels reflection, waardoor je dus een adapter-class kunt maken die die callback interface implementeert. Zo kun je dus beide kanten op, als je Strings of Methods in een map gaat stoppen niet (met het bijkomend nadeel dat je ook nog een thispointer nodig hebt om die Method uberhaupt aan te roepen)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1