是否有一种简单的方法来迭代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};
有人能想出更好的东西吗?
答案 0 :(得分:6)
现在可以使用ClassOrInterface.caseValues
:
Suit[] suits = `Suit`.caseValues;
此序列是有序的,并且会跳过任何案例类型以仅包含案例值。
答案 1 :(得分:1)
一种方法是使用元模型:
for (caseType in `class Suit`.caseTypes) {
assert (is OpenClassOrInterfaceType caseType);
print(caseType.declaration.name);
}