我已经使用Javassist在我生成的代码中使用了以下类。
public class SomeClass {
private String someString;
private Object someValue;
public SomeClass() {}
public SomeClass(String someString, Object someValue) {
this.someString = someString;
this.someValue = someValue;
}
public void setSomeValue(Object someValue) {
this.someValue = someValue;
}
在Javassist中,我分析了一些类及其字段,然后尝试实现我的SomeClass类。但是,对于每个具有java.lang.Object
的其他类型的字段,我会收到以下错误。
javassist.CannotCompileException: [source error] setSomeValue(int) not found in com.test.SomeClass
和
javassist.CannotCompileException: [source error] setSomeValue(double) not found in com.test.SomeClass
等等。当我尝试使用构造函数时也会发生同样的情况。
为什么这不起作用?
顺便说一句,Javassist与Android结合使用。
答案 0 :(得分:0)
您需要区分原始数据类型和类:
原始数据类型(byte
,short
,int
,long
,float
,double
,boolean
,{{1} }}不能像类一样使用(比如你的char
),为了能够将它们用作Object
,你需要包装类(Objects
,{{1} },Integer
等。)。
这是java的基础,你应该在java在线了解原始数据类型:Oracle Java Documentation可以帮助你。
当有包装类时,您可能也会问自己为什么原始数据类型甚至是必要的。您可以在this Stack Overflow question上找到答案。