我有一个关于 Xtend 的非常具体的问题。
在我读到的有关 xText/xTend 的每个示例中,我都会看到类似这样的内容:
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
for(e: resource.allContents.toIterable.filter(typeof(Entity))) {
fsa.generateFile(
e.fullyQualifiedName.toString("/") + ".java",
e.compile)
}
}
好吧,更具体一点resource.allContents.toIterable.filter(typeof(Entity)))
是给我带来问题的一个。我想知道如何在没有实体子类的情况下从所有实体沿着资源树向下查找。方法过滤器获取资源中类型实体及其子类的所有对象,但我只想忽略子类并只获取实体。
最佳答案
请尝试以下表达式:
allContents.toIterable.filter(typeof(Entity)).filter[ getClass == typeof(Entity) ]
第一个过滤器表达式在您所描述的意义上是类型安全的(它返回一个 Iterable,而第二个过滤器表达式确保您不会产生任何子类型。
如果您使用 EMF,这不会产生任何结果,因为 Entity 是一个接口(interface),具体类将类似于 EntityImpl。在这种情况下,我建议使用 EMF API 来过滤所有“真实”实体:
allContents.toIterable
.filter(typeof(Entity))
.filter[ eClass == MyEPackage$Literals::ENTITY ]
关于java - XTEND - 资源管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13251362/