我想使用javassist创建一个这样的方法:
public List<String> queryList(Long id) { return new ArrayList<String>();}
但是,如何将通用类类型“String”分配给List?
这不可能。见javassist documentation:
Java的泛型通过擦除技术实现。编译后,所有类型参数都将被删除。例如,假设您的源代码声明了参数化类型Vector:
Vector<String> v = new Vector<String>();
:
String s = v.get(0);
编译后的字节码等效于以下代码:
Vector v = new Vector();
:
String s = (String)v.get(0);
因此,编译后的方法如下所示:
public List queryList(Long id) { return new ArrayList();}
如果需要,在场景后面有一个需要的类型。另见:Type Erasure in Java Explained