2009-09-08 3 views
6

Non riesco a cercare | in Google. Se lo avessi trovato in un codice sorgente software che stai cercando di interpretare, non sapevi cosa fa e non potresti chiedere aiuto ad altre persone, come faresti a sapere che cosa fa?Che cosa significa "|" in "int style = SWT.APPLICATION_MODAL | SWT.OK;" fare (e come fare a Google)?

+0

Non puoi google, ma dovresti riuscire a trovarlo nell'indice JLS. –

+0

vedere http://stackoverflow.com/questions/47981 –

+0

@sheepsimulator: perché aggiungere tag c e C++, quando non sono del tutto estranei alla domanda? Se vuoi urtare la domanda, almeno usa tag decenti. –

risposta

30

L'operatore di pipe in questo caso indica "utilizza sia SWT.APPLICATION_MODAL che SWT.OK come opzioni/contrassegni per la mia casella popup." È un idioma molto usato con identificatori di configurazione bitfield, esp. in sistemi di finestre come SWT o Win32.

Come funziona

Il tubo (|) operatore è l'operatore OR, cioè calcola un'operazione OR dei due valori interi binari. Se si estrae in cui sono definiti APPLICATION_MODAL e OK, troverete che sono qualcosa di simile:

... 
SWT.OK = 1,     // 00000001 in binary 
SWT.ABORT_RETRY_IGNORE = 2, // 00000010 in binary 
SWT.OK_CANCEL = 4;   // 00000100 in binary 
... 
SWT.APPLICATION_MODAL = 32; // 00100000 in binary 
... (and so on...) 

Quando si OR bit per bit di due (o più) di questi numeri insieme, i singoli bit sarà impostato per ciascuna delle le opzioni:

int style = SWT.OK | SWT.APPLICATION_MODAL = 00000001 | 00100000 = 00100001 

Il toolkit a finestre che va ad interpretare lo stile sarà in grado di dire esattamente quello che si voleva (una scatola pop-up che è modale e ha un pulsante OK) facendo un AND bit per bit come questo:

... 
if(style & SWT.OK) 
{ 
    // we want an OK box 
} 
if(style & SWT.ABORT_RETRY_IGNORE) 
{ 
    // we want an Abort/Retry/Ignore box 
} 
if(style & SWT.OK_CANCEL) 
{ 
    // we want an OK/Cancel box 
} 
... 
if(style & SWT.APPLICATION_MODAL) 
{ 
    // We want a modal box 
} 
... 

Un po 'intelligente, secondo il mio modesto parere. Permette di selezionare/rappresentare più opzioni di configurazione in una singola variabile. Il trucco sta nelle definizioni intere delle opzioni e assicurando che siano solo potenze di 2.

+0

Risposta molto dettagliata. +1 – MitMaro

+0

Puoi anche confrontare questa risposta per maggiori informazioni: http://stackoverflow.com/questions/276706/what-are-bitwise-operators/276771#276771 –

+1

Questo è molto comune in C e C++, ma io Sono curioso (come qualcuno che non ha fatto molto Java) sul fatto che sia idiomatico in Java usare un numero intero come un insieme di flag booleani? – caf

1

| è l'operatore OR. Questi due valori sono probabilmente flag che sono interi con set di 1 bit e il valore risultante è quali valori di stile utilizzare.

0

Bitwise OR.

Con la maggior parte delle cose, c'è un po 'di una curva di apprendimento. Se stavo imparando una nuova lingua, direi che era un operatore e cercava "operatori Java".

2

È un bitwise OR, fornisce un mezzo per passare un numero di flag al componente SWT come un singolo int, piuttosto che dover sovraccaricare il tipo con un sacco di metodi setter.

Le due proprietà elencate indicano una finestra di dialogo o un'altra finestra che deve essere visualizzata in modo modale sulla shell principale e utilizzare il pulsante ok. Puoi combinarlo con SWT.CANCEL per visualizzare un pulsante OK e Annulla per esempio

11

In risposta alla tua domanda su come scoprire cosa fa, vorrei prima ragione a me stesso se fosse un simbolo o un operatore. Questo da solo mi aiuta a capire cosa cercare in Google. Anche i tipi di variabili utilizzate mi danno un'idea: è un operatore che sta lavorando su tipi int.

Spero che questo aiuti.

+0

grazie per aver letto la parte che la maggior parte delle persone ha saltato !!! –

+0

grazie per avermi fatto sapere che lo apprezzi! Sembra che molte persone siano veloci a postare dal momento che vogliono essere i primi a rispondere e ottenere rapidamente punti rep ... oh beh. – weiji

0

utilizzare un motore di ricerca in grado di gestire la cosa: A | B

+0

Oppure un motore di ricerca che non risponde alla domanda. L'OP voleva sapere cosa significa * in Java *. Non in matematica in generale. – jalf

+2

@jalf, rilassati amico. – rodrigoap

2

Purtroppo, Google è schifoso a simboli.Invece, mi piacerebbe iniziare, cercando in the Wikipedia page e cercare lì per "|", che e ':

e quella pagina ha una buona panoramica di cosa è cosa e come usarlo.