我从 NotesList 演示开始评估 Android 上的 Scala。我能够NotesLiveFolder.java
毫无问题地用它的 Scala 等效文件替换该文件。
接下来,我介绍了 Roboguice,创建了一个NotesListApplication.java
设置 Guice 模块的简单程序,并成功地将资源注入到NoteEditor.java
活动中。
最后,当我尝试NotesListApplication.java
用它的 Scala 等效项替换时,在应用程序完成启动之前出现以下运行时错误:
java.lang.ClassNotFoundException: com.example.android.notepad.NotesListApplication in loader dalvik.system.PathClassLoader[/data/app/com.example.android.notepad-1.apk]
我创建了一个包含完整 Eclipse 项目和源代码的Google Code 项目。原来的功能NotesListApplication.java
是:
package com.example.android.notepad;
import java.util.List;
import roboguice.application.RoboApplication;
import com.google.inject.Module;
public class NotesListApplication extends RoboApplication {
private Module module = new BindEverything();
public void setModule(Module module) {
this.module = module;
}
@Override
protected void addApplicationModules(List<Module> modules) {
modules.add(module);
}
}
导致错误的Scala等价物是:
package com.example.android.notepad
import roboguice.application.RoboApplication
class NotesListApplication extends RoboApplication {
val module : Module = new BindEverything()
override protected def addApplicationModules(modules:java.util.List[Module] ) {
modules.add(module)
}
}
我正在使用 ScalaIDE 插件在 Eclipse 中构建。我没有运行任何 treeshaker/proguard/etc。
反汇编按预期显示了 Scala 类:
Class descriptor : 'Lcom/example/android/notepad/NotesLiveFolder;'
...
Class descriptor : 'Lcom/example/android/notepad/NotesListApplication;'
有什么想法可能导致这种情况吗?