2015-04-02 13 views
8

Esiste un pacchetto che definisce la dimensione delle primitive Java che posso importare nel mio progetto? Sto facendo alcune impostazioni di bit manuale e tengo un indice di byte. Non voglio fare currentByte += 4 quando ho impostato un int (i numeri magici sono disapprovati), preferisco fare currentByte += <SomePackage>.SIZE_OF_INTJava definisce la dimensione dei suoi tipi primitivi ovunque?

Credo di poter definire il mio, ma è un po 'goffo, soprattutto se quelli sono disponibili da qualche parte.

+2

[Primitive Datatypes in Java] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) – nem035

+2

Se stai usando 'currentByte', probabilmente c'è una struttura dati migliore può usare, come un buffer. – chrylis

+0

Sto provando a mantenere le modifiche al minimo a causa dei motivi del processo, ma fornirò un pensiero. – ventsyv

risposta

24

Non una classe, ma si dispone di Integer.SIZE e così via per Long e anche di classi in virgola mobile. Hai anche *.BYTES.

Pertanto Integer.SIZE è 32, Integer.BYTES è 4, è Double.SIZE 64 e Double.BYTES è 8, ecc ecc; tutti questi sono int s nel caso ve lo stiate chiedendo.

NOTA: *.BYTES sono definiti solo dal Java 8 (grazie per averlo notato @Slanec)

(? *.SIZE apparso in Java 5, ma si fare uso almeno che, a destra)

E sì, questo è definito dal JDK poiché lo stesso JLS definisce la dimensione dei tipi primitivi; si è quindi garantito che si avranno gli stessi valori per queste costanti su qualsiasi implementazione Java su qualsiasi piattaforma.

+0

Java SE 7 è la mia distro di destinazione. – ventsyv

+0

@ventsyv quindi hai almeno '* .SIZE' – fge

8

La specifica del formato di primitive è contenuta nel linguaggio Java Specification, Section 4.2

I tipi integrali sono byte, short, int, e lungo, i cui valori sono 8 bit, 16 bit, Numeri interi a complemento a due a 32 bit e 64 bit, rispettivamente, e char, i cui valori sono numeri interi senza segno a 16 bit che rappresentano unità di codice UTF-16 (§3.1).

Questo è il standard e non cambierà, così non ha bisogno di importarli in. È possibile utilizzarli come numeri magici (anche se, come fge punti fuori, che questi sono numeri magici che sono memorizzati in posti ragionevoli nelle varie classi wrapper da Java 5 e si dovrebbero usare quelli invece di ridefinirli da soli).

+1

Gli standard cambiano – shookees

+3

@shookees qualsiasi modifica di questi valori sarebbe una modifica di rottura per tutti i file di classe e la loro compatibilità con le versioni precedenti e successive.Che "il tuo codice non funziona più * come previsto *" sarebbe minore rispetto al "tuo codice non funziona più". Non credo che questi potrebbero cambiare e rimanere Java. Dato che 'Integer.SIZE' è una finale statica e viene sostituita al momento della compilazione, usando il valore in Integer, se dovesse cambiare, allo stesso modo cambierebbe una modifica in una versione successiva. –

+3

@shookees mentre sono assolutamente d'accordo sul fatto che gli standard cambiano, mi sentirei a mio agio nel chiamare questo genere di cose che in genere non cambierebbero. Oracle è dietro Java, e Oracle non è il tipo di azienda per cambiare queste cose. Guardando agli standard di aziende e consorzi simili, questo è il tipo di dettaglio che si piegherebbero all'indietro per evitare di cambiare. Se le specifiche della lingua fossero talmente tese da indurre Oracle a cambiare questa situazione, ho la sensazione che ci siano così tanti altri problemi che le dimensioni sarebbero l'ultima delle tue preoccupazioni. –

Problemi correlati