我有幾個實作介面的列舉Word。我想生成這些列舉的所有值的串列。
我目前這樣做的方式是:
public Set<Word> allWords() {
Set<Word> dictionary = new HashSet<>();
dictionary.addAll(Arrays.asList(Article.values()));
dictionary.addAll(Arrays.asList(Conjunction.values()));
dictionary.addAll(Arrays.asList(Verb.values()));
// And so on...
return dictionary;
}
有沒有辦法迭代這些列舉?我想這將涉及創建一個 Class 物件串列,但我不確定如何將其轉換回實際值。
如果相關,Word 和每個列舉都在同一個包(詞典)中。
uj5u.com熱心網友回復:
反射僅在您不知道列舉時才有意義(即您必須在包中發現列舉)。
如果您已經知道列舉,那么您的代碼的變體是合理的。
例如:
public List<Word> allWords()
{
List<Word> returnValue = new LinkedList<>();
returnValue.addAll(Arrays.asList(Article.values()));
returnValue.addAll(Arrays.asList(Conjunction.values()));
returnValue.addAll(Arrays.asList(Verb.values()));
// And so on...
return returnValue;
}
我建議 aList因為Set將按名稱洗掉重復項。
編輯:我的串列建議現在似乎沒有必要。
uj5u.com熱心網友回復:
如果您所有的列舉都在同一個包中,這可能就是您要找的。如果同一個包中有其他類,您可能必須使用介面在回圈中進行一些過濾
uj5u.com熱心網友回復:
您可以使用 Stream API 或普通方法遍歷值 for-loop
allWords()
.stream()
.forEach(System.out::println);
// or
Stream.of(Article.values())
.map(Article::text) // .text is a method from your interface Word
.forEach(System.out::println);
但老實說,您正試圖對這些列舉做一些奇怪的事情。
你的任務是什么?為什么你試圖通過列舉來解決它?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/378271.html
