如果您使用,创建带有 getter 和 setter 的简单 POJO 会很容易CGLib:
public static Class<?> createBeanClass(
/* fully qualified class name */
final String className,
/* bean properties, name -> type */
final Map<String, Class<?>> 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();
}
测试代码:
public static void main(final String[] args) throws Exception{
final Map<String, Class<?>> properties =
new HashMap<String, Class<?>>();
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:
类 some.ClassName
public int[] some.ClassName.getBaz()
公共无效 some.ClassName.setBaz(int[])
公共 java.lang.Integer some.ClassName.getFoo()
公共无效一些.ClassName.setFoo(java.lang.Integer)
public java.lang.String some.ClassName.getBar()
公共无效一些.ClassName.setBar(java.lang.String)
但问题是:您无法针对这些方法进行编码,因为它们在编译时不存在,所以我不知道这对您有什么好处。