我有各种Node
和Token
其他课程。每个类都有自己的Type
枚举。
我有节点列表、标记列表和其他事物列表。
而且我经常想看看列表中是否有任何特定项目Type
。
例如,要查看标记列表中是否有任何关键字,我会遍历它们:
Token found = null;
for(Token token: statement)
if(token.type == Token.Type.KEYWORD &&
(token.token.equals("static") ||
(token.token.equals("final")) {
found = token;
break;
}
if(found != null) {
....
如果我编写小帮手,我可以大量整理我的代码(因为我想弄清楚列表中的内容很多):
Token any(Collection<Token> haystack,Token.Type type,String... needles) {
for(Token straw: haystack)
if(straw.type == type)
for(String needle: needles)
if(needle.equals(straw.token))
return straw;
return null;
}
然后,在其他地方,我可以:
if((found = any(statement,Token.Type.KEYWORD,"static","final")) != null)
...
有什么方法可以概括这个Node
和其他变量,以及不是字符串的比较,字段不同,命名不同?
使用 C++ 模板,您可以回避类型;使用Java,我正在努力了解如何做到这一点,尽管使类与它们自己的类型等可比可能是一种前进的方式?