Codenameone 米拉的问题

Codenameone 米拉的问题,codenameone,Codenameone,我使用代码名为One的Mirah库主要作为Json和Java类之间的对象映射器 我遇到了Mirah试图映射未在.Mirah类中声明的类的问题。例如,my.mirah类有一个产品的数据映射器 数据映射器产品:ProductMapper 但是错误是抱怨IUser接口,而不是产品类!作为初学者,我不明白为什么Mirah会抱怨一个没有声明为datamapper的类。我错过什么了吗?请记住,在我当前的代码中,产品只有原始数据类型变量,绝对没有对IUser接口或用户实现类的引用 nbproject\mira

我使用代码名为One的Mirah库主要作为Json和Java类之间的对象映射器

我遇到了Mirah试图映射未在.Mirah类中声明的类的问题。例如,my.mirah类有一个产品的数据映射器

数据映射器产品:ProductMapper

但是错误是抱怨IUser接口,而不是产品类!作为初学者,我不明白为什么Mirah会抱怨一个没有声明为datamapper的类。我错过什么了吗?请记住,在我当前的代码中,产品只有原始数据类型变量,绝对没有对IUser接口或用户实现类的引用

nbproject\mirah-build-cn1.xml:152: java.lang.RuntimeException:找不到接口IUser的存根 位于ca.weblite.asm.JavaExtendedStubCompiler$2.visitClass(JavaExtendedStubCompiler.java:694) 在com.sun.tools.javac.tree.JCTree$JCClassDecl.accept上(JCTree.java:720) 在com.sun.source.util.TreePathScanner.scan上(TreePathScanner.java:68) 位于com.sun.source.util.TreeScanner.scan(TreeScanner.java:91) 在com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:99)上 位于com.sun.source.util.TreeScanner.visitcomplationUnit(TreeScanner.java:120) 位于ca.weblite.asm.JavaExtendedStubCompiler$2.visitComplationUnit(JavaExtendedStubCompiler.java:275) 位于com.sun.tools.javac.tree.JCTree$jccomilationunit.accept(JCTree.java:550) 在com.sun.source.util.TreePathScanner.scan上(TreePathScanner.java:68) 位于com.sun.source.util.TreeScanner.scan(TreeScanner.java:91) 位于ca.weblite.asm.JavaExtendedStubCompiler.compile(JavaExtendedStubCompiler.java:797) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileFile(JavaExtendedStubCompiler.java:174) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:211) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:214) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:214) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:214) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:214) 位于ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:193) 位于ca.weblite.asm.WLMirahCompiler.compile(WLMirahCompiler.java:208) 位于ca.weblite.mirah.ant.MirahcTask.execute(MirahcTask.java:158) 位于org.apache.tools.ant.UnknowneElement.execute(unknowneElement.java:292) 位于sun.reflect.GeneratedMethodAccessor68.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 位于org.apache.tools.ant.Task.perform(Task.java:348) 位于org.apache.tools.ant.Target.execute(Target.java:435) 位于org.apache.tools.ant.Target.performTasks(Target.java:456) 位于org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 位于org.apache.tools.ant.Project.executeTarget(Project.java:1364) 位于org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 位于org.apache.tools.ant.Project.executeTargets(Project.java:1248) 位于org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286) 位于org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555) 位于org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153) 生成失败(总时间:10秒)

我还想提到的是,我高度怀疑清理项目可能不会清理所有Mirah生成的类。由于上述错误,我根本无法构建我的应用程序,因此我尝试从项目中删除“.mirah”类,然后尝试清理和重建,但从那时起我仍然收到相同的错误

我能够让项目重新编译的唯一方法是启动一个全新的项目,并将我的源文件移到那里,而不使用.mirah类

我很欣赏你的见解

更多详情更新如下

嗨,史蒂夫。非常感谢您的反馈!我花了一些时间试图追查这个问题。我认为这个问题与泛型有关。据我所知,泛型类型是在编译时被替换的,所以我猜Codename One可以很好地支持泛型。此外,我的代码在尝试使用Mirah方法之前编译得很好。我真的认为米拉是个好主意

下面是重新创建问题的几个步骤。我启动了一个CN1 Hello world项目,并创建了以下类

1) 我的房子

3) 圆窗

public class RoundWindow implements IWindow {

private int windowColor;
private String shape;

public RoundWindow() {
    String shape = "ROUND";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}

}
4) 方窗

public class SquareWindow implements IWindow {

private int windowColor;
private String shape;

public SquareWindow() {
    String shape = "SQUARE";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}
}
5) 房子

public class House实现IHouse{
私人室内色彩;
列出窗口;
@凌驾
public int getHouseColor(){
返回颜色;
}
@凌驾
公共空间setHouseColor(内部颜色){
房屋颜色=颜色;
}
@凌驾
公共列表getWindows(){
返回窗口;
}
@凌驾
公共无效设置窗口(列表窗口){
this.windows=windows;
}
}
总而言之,我有一个IHouse接口,支持实现IWindow的任何类型的窗口。然后,实现IHouse接口的House类可以严格指定它支持/使用的窗口

在添加Mirah插件之前,此代码在CN1中编译良好。虽然我收到了一个与我之前在添加Mirah时解释的相同的错误

执行此行时发生以下错误: C:\Users\location\NetBeansProjects\Test\nbproject\mirah build.xml:51: java.lang.RuntimeException:找不到接口IHouse的存根 位于ca.weblite.asm.JavaExtendedStubCompiler$2.visitClass(JavaExtendedStubCompiler)。
public class RoundWindow implements IWindow {

private int windowColor;
private String shape;

public RoundWindow() {
    String shape = "ROUND";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}

}
public class SquareWindow implements IWindow {

private int windowColor;
private String shape;

public SquareWindow() {
    String shape = "SQUARE";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}
}
public class House implements IHouse<RoundWindow> {

private int houseColor;

List<RoundWindow> windows;

@Override
public int getHouseColor() {
    return houseColor;
}

@Override
public void setHouseColor(int color) {
    houseColor = color;
}

@Override
public List<RoundWindow> getWindows() {
    return windows;
}

@Override
public void setWindows(List<RoundWindow> windows) {
    this.windows = windows;
}

}
Failed to get signature for method 
public List<W> getWindows();
Failed to get signature for method 
public void setWindows(List<W> windows);