Java reflection appropriateness
- by jsn
This may be a fairly subjective question, but maybe not.
My application contains a bunch of forms that are displayed to the user at different times.  Each form is a class of its own.  Typically the user clicks a button, which launches a new form.
I have a convenience function that builds these buttons, you call it like this:
buildButton( "button text", new SelectionAdapter() {
     @Override
     public void widgetSelected( SelectionEvent e ) {
        showForm( new TasksForm( args... ) );
     }
  } );
I do this dozens of times, and it's really cumbersome having to make a SelectionAdapter every time.
Really all I need for the button to know is what class to instantiate when it's clicked and what arguments to give the constructor, so I built a function that I call like this instead:
buildButton( "button text", TasksForm.class, args... );
Where args is an arbitrary list of objects that you could use to instantiate TasksForm normally.
It uses reflection to get a constructor from the class, match the argument list, and build an instance when it needs to.  Most of the time I don't have to pass any arguments to the constructor at all.  The downside is obviously that if I'm passing a bad set of arguments, it can't detect that at compilation time, so if it fails, a dialog is displayed at runtime.  But it won't normally fail, and it'll be easy to debug if it does.
I think this is much cleaner because I come from languages where the use of function and class literals is pretty common.  But if you're a normal Java programmer, would seeing this freak you out, or would you appreciate not having to scan a zillion SelectionAdapters?