私はさまざまな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では、クラスを独自の型と比較できるようにするなど、これを行う方法を理解するのに苦労していますか?