2015-05-06 42 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找到答案。