Javassist - CannotCompileException: constructor/method 声明未找到
Javassist - CannotCompileException: constructor/method declaration not found
我有以下 class,我想在使用 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 中,我分析了一些 classes 及其字段,然后尝试实例化我的 SomeClass-class。但是对于每个具有另一种类型的字段,我得到以下错误 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使用的。
您需要区分原始数据类型和 类:
原始数据类型(byte
、short
、int
、long
、float
、double
、boolean
、char
) 不能像 class 那样使用(比如 Object
在你的情况下),为了能够将它们用作 Objects
,你需要包装器 classes (Integer
、Short
、Long
等)。
这是 java 的基础知识,您应该在 java 在线了解原始数据类型:Oracle Java Documentation 可能会帮助您。
您可能还会问自己为什么在有包装器 classes 时甚至需要原始数据类型。您可以在 this Stack Overflow question.
上找到答案
我有以下 class,我想在使用 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 中,我分析了一些 classes 及其字段,然后尝试实例化我的 SomeClass-class。但是对于每个具有另一种类型的字段,我得到以下错误 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使用的。
您需要区分原始数据类型和 类:
原始数据类型(byte
、short
、int
、long
、float
、double
、boolean
、char
) 不能像 class 那样使用(比如 Object
在你的情况下),为了能够将它们用作 Objects
,你需要包装器 classes (Integer
、Short
、Long
等)。
这是 java 的基础知识,您应该在 java 在线了解原始数据类型:Oracle Java Documentation 可能会帮助您。
您可能还会问自己为什么在有包装器 classes 时甚至需要原始数据类型。您可以在 this Stack Overflow question.
上找到答案