在完成所有其余工作后,我将序列化我的实际基础对象,并发现它总是会引发一个错误,即无法猜测我要序列化的类。这是我正在尝试做的高度简化的示例,以及对我来说似乎很有意义的注释。
我要序列化基本对象(或装箱的基本对象)的List <>,在这种情况下,是一个int和一个字符串。我的实际课程也是所有原始(或盒装原始)类型。
@JSONMapper
public static interface TestMapper extends ObjectMapper<TestElmt>{
TestMapper INSTANCE = new Webworkers_TestMapperImpl();
}
public static class TestElmt {
List<test> inerVar = new ArrayList<>();
public void addElement(test elmt){
inerVar.add(elmt);
}
public List<test> getElements(){
return inerVar;
}
}
@JSONMapper
public static class test{
public static test_MapperImpl MAPPER = new test_MapperImpl();
int x;
String y;
test(int X,String Y){
x = X;
y = Y;
}
}
但是我得到的错误是:
错误:java:创建源文件时出错 java.lang.IllegalArgumentException:无法猜测 client.myEnclosingClass.test
答案 0 :(得分:2)
问题中的代码有两个问题,它们无法编译:
首先将测试类命名为Test
-大写T-而不是test
-小t-。
第二,在类测试中应该没有args构造函数,否则反序列化器将不知道如何创建该类的新实例,它将被生成,但是在其create
方法中将出现编译错误。 / p>
如果我们像这样更改测试类,那么所有这些都应该起作用
@JSONMapper
public static class Test {
public static Test_MapperImpl MAPPER = new Test_MapperImpl();
int x;
String y;
public Test() {
}
Test(int X, String Y){
x = X;
y = Y;
}
}
这是因为gwt-jackson-apt做出了一些假设并使用了一些约定来生成基础的序列化器/反序列化器。