2012-03-10 10 views
5

Ho un parser che ha questo costrutto su un'infinità di volte:passando un argomento per essere utilizzato da instanceof

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

vorrei sapere come fare questo:

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

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

I' m avendo un errore wetware e non riesco a capire la classe di tokenType nel metodo. Un altro problema è che Java considera 'tokenType' come un valore letterale. Cioè:

instanceof tokenType 

sembra proprio come

instanceof CommaToken 

rispetto alla sintassi.

Qualche idea?

risposta

8

È possibile farlo utilizzando gli oggetti Class via class (per ottenere un oggetto di classe da un riferimento di classe) e getClass() (per ottenere un oggetto di classe da un'istanza):

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

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

Tecnicamente, l'equivalente dinamico 'instanceof' dovrebbe essere [' Class # isInstance (Object) '] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#isInstance (java. lang.Object)) –

Problemi correlati