2015-05-06 32 views
0

我有我想要在Javassist生成的代码中使用以下类。Javassist - CannotCompileException:构造函数/方法声明未找到

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

您需要原始数据类型和类之间的区别: 一种原始数据类型(byteshortintlongfloatdoublebooleanchar)不能像使用一个类(像你的情况Object),在为了能够使用它们作为Objects,您需要包装类(Integer,Short,Long等)。

这是java的一个基础,你应该让自己知道java中的原始数据类型在线:Oracle Java Documentation可能会帮助你。

你可能还会问自己,为什么在有包装类时,原始数据类型甚至是必需的。你可以在this Stack Overflow question找到答案。