I\'ve the following scenario..
I am writing some tool that run user-entered query against the database and return the result..
The simplest way is to return
Creating a simple POJO with getters and setters is easy if you use CGLib:
public static Class> createBeanClass(
/* fully qualified class name */
final String className,
/* bean properties, name -> type */
final Map> properties){
final BeanGenerator beanGenerator = new BeanGenerator();
/* use our own hard coded class name instead of a real naming policy */
beanGenerator.setNamingPolicy(new NamingPolicy(){
@Override public String getClassName(final String prefix,
final String source, final Object key, final Predicate names){
return className;
}});
BeanGenerator.addProperties(beanGenerator, properties);
return (Class>) beanGenerator.createClass();
}
Test code:
public static void main(final String[] args) throws Exception{
final Map> properties =
new HashMap>();
properties.put("foo", Integer.class);
properties.put("bar", String.class);
properties.put("baz", int[].class);
final Class> beanClass =
createBeanClass("some.ClassName", properties);
System.out.println(beanClass);
for(final Method method : beanClass.getDeclaredMethods()){
System.out.println(method);
}
}
Output:
class some.ClassName
public int[] some.ClassName.getBaz()
public void some.ClassName.setBaz(int[])
public java.lang.Integer some.ClassName.getFoo()
public void some.ClassName.setFoo(java.lang.Integer)
public java.lang.String some.ClassName.getBar()
public void some.ClassName.setBar(java.lang.String)
But the problem is: you have no way of coding against these methods, as they don't exist at compile time, so I don't know what good this will do you.