2012-03-10 3 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 обрабатывает «токен-тип» как литерал. То есть:

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)) –

Смежные вопросы