迭代枚举的类实例

时间:2013-10-16 11:19:41

标签: ceylon

是否有一种简单的方法来迭代Ceylon中所有类的枚举实例?

就像Java枚举的values()一样?

abstract class Suit() of hearts | diamonds | clubs | spades {
    shared formal String name; 
}
object spades extends Suit() { name => "Spades"; }
object clubs extends Suit() { name => "Clubs"; }
object diamonds extends Suit() { name => "Diamonds"; }
object hearts extends Suit() { name => "Hearts"; }

让我们说我想选择一件随意的西装,或者我想用他们的名字打印所有西装。

修改

明确地将所有套装添加到可迭代的工作中,但我们必须再次列出所有可能的值。

{Suit+} suits = {spades, clubs, diamonds, hearts};

有人能想出更好的东西吗?

2 个答案:

答案 0 :(得分:6)

现在可以使用ClassOrInterface.caseValues

完成此操作
Suit[] suits = `Suit`.caseValues;

关于returned sequence

  

此序列是有序的,并且会跳过任何案例类型以仅包含案例值。

答案 1 :(得分:1)

一种方法是使用元模型:

for (caseType in `class Suit`.caseTypes) {
    assert (is OpenClassOrInterfaceType caseType);
    print(caseType.declaration.name);
}