2012-03-10 113 views
5

使用我有了這個結構,卻有無數次解析器:傳遞參數通過的instanceof

if (tokens.first() instanceof CommaToken) { 
    tokens.consume(); 

我想知道如何做到這一點:

if (match(CommaToken)) { ... blah ... } 

private boolean match(??? tokenType) { 
    if (tokens.first() instanceof tokenType) { ... blah ... } 
} 

我m有一個wetware失敗,並且無法計算出該方法中的tokenType類。另一個問題是Java將'tokenType'視爲文字。那就是:

instanceof tokenType 

看起來就像

instanceof CommaToken 

相對於語法。

任何想法?

回答

8

可以通過使用類對象經由class要這樣做(以獲得從一個類引用類對象)和getClass()(從一個實例得到一類對象):

if (match(CommaToken.class)) { ... blah ... } 

private boolean match(Class<?> klass) { 
    if (tokens.first().getClass().equals(klass)) { ... blah ... } 
} 
+4

技術上,動態等效'instanceof'必須是['Class#isInstance(Object)'](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#isInstance(java。 lang.Object)) – 2012-03-10 05:22:21