我遵循这本书"使用Xtext和Xtend实现特定于域的语言"作者:Lorenzo Bettini,在第6章的某些时候,我要求使用Xtext提供的API,引用使用Google Guice的依赖注入。
实施的服务守则
class EntitiesOutputConfigurationProvider extends OutputConfigurationProvider {
public val ENTITIES_GEN = "./entities-gen"
override getOutputConfigurations() {
super.getOutputConfigurations() => [
head.outputDirectory = ENTITIES_GEN
]
}
}
绑定的代码是:
public class EntitiesRuntimeModule extends AbstractEntitiesRuntimeModule {
public Class<? extends IOutputConfigurationProvider>
bindIOutputConfigurationProvider() {
return EntitiesOutputConfigurationProvider. class;
}
}
我在
之后收到以下错误AbstractEntitiesRuntimeModule
错误:
输入不匹配&#39; {&#39;期待&#39; =&gt;&#39;
根据书和Xtext文档,代码是正确的。 任何人都有任何想法?
P.S。:我的Xtext版本是2.9
答案 0 :(得分:0)
您在Xtend类中使用Java语法。
要在Xtend中定义新方法,您始终必须使用def
关键字。
特定错误消息的原因是Xtend支持函数类型的缩写。例如,()=>String
是不带参数并返回String的函数的类型,并且是Function0<? extends String>
的缩写。
在Xtend中,public Class<? extends IOutputConfigurationProvider> bindIOutputConfigurationProvider
是一个完整的字段定义(不是方法定义),并且Xtend解析器认为您正在尝试启动具有函数类型的第二个字段定义,但您没有完全指定类型。在函数类型中,()
之后的下一件事总是必须是=>
,因此解析器会抱怨它找到了{
。