2012-03-10 16 views
5

Tengo un analizador que tiene esta construcción sobre un millón de veces:pasar un argumento para ser utilizado por instanceof

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

Me gustaría saber cómo hacer esto:

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

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

I' m que tiene una falla de wetware y no puede determinar la clase de tokenType en el método. Otro problema es que Java trata a 'tokenType' como un literal. Es decir:

instanceof tokenType 

se parece a

instanceof CommaToken 

con respecto a la sintaxis.

¿Alguna idea?

Respuesta

8

Usted puede hacer esto mediante el uso de objetos de la clase a través de class (para obtener un objeto de clase a partir de una referencia de clase) y getClass() (para obtener un objeto de clase de una instancia):

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

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

Técnicamente, el equivalente dinámico de 'instanceof' tendría que ser [' Class # isInstance (Object) '] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#isInstance (java. lang.Object)) –

Cuestiones relacionadas