传递一个由instanceof使用的参数

Ton*_*nis 6 java instanceof

我有一个解析器,这个构造大约有数万次:

if (tokens.first() instanceof CommaToken) {
    tokens.consume();
Run Code Online (Sandbox Code Playgroud)

我想知道如何做到这一点:

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

private boolean match(??? tokenType) {
    if (tokens.first() instanceof tokenType) { ... blah ... }  
}
Run Code Online (Sandbox Code Playgroud)

我有一个wetware故障,无法弄清楚方法中的tokenType类.另一个问题是Java将'tokenType'视为文字.那是:

 instanceof tokenType
Run Code Online (Sandbox Code Playgroud)

看起来就像

 instanceof CommaToken
Run Code Online (Sandbox Code Playgroud)

关于语法.

有任何想法吗?

Kal*_*see 9

您可以通过使用Class对象class(从类引用getClass()中获取Class对象)和(从实例获取Class对象)来完成此操作:

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

private boolean match(Class<?> klass) {
    if (tokens.first().getClass().equals(klass)) { ... blah ... }  
}
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,`instanceof`的动态等价物必须是[`Class#isInstance(Object)`](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class. HTML#isInstance(java.lang.Object中)) (7认同)