2012-03-10 108 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