如何在我的 Android 项目中使用 Eclipse 的新 Xtend 语言?

2022-09-02 13:12:06

我想用Xtend语言编写Java类(仅仅是因为它的方式更简洁),并让它编译回Java类,我可以在Java项目中使用。就像咖啡脚本一样。我该怎么做?

我尝试创建一个Xtend文件,就像我对新类所做的那样,但是我得到这个错误:

在类路径上找不到必需的库包。'org.eclipse.xtext.xbase.lib'

这将禁用智能感知(自动完成)。另外,即使我确实可以工作,我怎么能把它编译成Java类呢?


答案 1

在 Xtend 中,内部类使用美元符号 ('$') 取消引用,静态成员使用双冒号 ('::') 进行访问。

HelloAndroid 活动代码将如下所示:

class XtendActivity extends Activity {

    override void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R$layout::main);
    }
}

答案 2

在尝试了同样的事情之后,我可以确认,启用Xtend Nature并将三个Xtend库(前面提到的'org.eclipse.xtext.xtend2.lib','org.eclipse.xtext.xbase.lib'和'com.google.inject')添加到项目的库中至少可以编译Xtend代码。但是,我在R类上也遇到了问题。

仔细检查,R 类的问题似乎不在于它位于不同的目录中。将文件复制到具有不同名称的主源目录不会更改任何内容。相反,看起来问题在于R类是静态最终类,包含几个静态最终子类。如果我创建一个简单的 plain-Java 包装器类,它将对 R.layout.main 的引用(例如)包装在一个普通方法中,并从我的 Xtend 代码中调用它,那么它确实会接受它并愉快地编译。

在那之后,我遇到的下一个问题是Android编译器抱怨在“org.eclipse.xtext.xtend2.lib”,“org.eclipse.xtext.xbase.lib”和“com.google.inject”中重复.html和插件.属性文件。通过从三个.jar文件中删除这些文件,这相对容易修复。我不确定它以后是否会破坏任何东西,但现在至少我有一个在Android模拟器上运行的Xtend代码的工作片段。


推荐