передача аргумента для использования instanceof - PullRequest
6 голосов
/ 10 марта 2012

У меня есть парсер, который имеет эту конструкцию около миллиона раз:

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

Я хотел бы знать, как это сделать:

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

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

У меня есть ПОошибка и не может определить класс tokenType в методе.Другая проблема заключается в том, что Java трактует «tokenType» как литерал.То есть:

 instanceof tokenType

выглядит как

 instanceof CommaToken

относительно синтаксиса.

Есть идеи?

1 Ответ

8 голосов
/ 10 марта 2012

Вы можете сделать это, используя объекты Class через class (чтобы получить объект Class из ссылки на класс) и getClass() (чтобы получить объект Class из экземпляра):

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

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