Risposte:
Non puoi. Una costante numerica di base è considerata un numero intero (o lungo se seguito da una "L"), quindi è necessario eseguirne esplicitamente il downcast su un byte per passarlo come parametro. Per quanto ne so non c'è scorciatoia.
byte b(int i) { return (byte) i; }
da qualche parte e importarlo staticamente. Quindi è possibile scrivere f (b (10)).
Devi lanciare, temo:
f((byte)0);
Credo che eseguirà la conversione appropriata in fase di compilazione anziché in fase di esecuzione , quindi non causerà effettivamente penali di prestazione. È solo scomodo :(
È possibile utilizzare un byte letterale in Java ... sorta di.
byte f = 0;
f = 0xa;
0xa
(int letterale) viene automaticamente trasmesso a byte. Non è un vero byte letterale (vedi JLS e commenti di seguito), ma se si rompe come un'anatra, lo chiamo anatra.
Quello che non puoi fare è questo:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Devi lanciare come segue:
foo( (byte) 0xa );
Ma tieni presente che verranno compilati tutti e utilizzano "valori letterali in byte":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Naturalmente anche questo viene compilato
foo( (byte) 1 ); //compiles
1
è un letterale int, ma double d = 1;
compila bene.
byte b(int i){}
, quindi b(1)
più lunga e meno complicata di f=1
.
Se passi letterali nel codice, cosa ti impedisce di dichiararlo in anticipo?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
che non ottenessi alcuni brutti bug di estensione dei segni.
Che ne dici di scavalcare il metodo con
void f(int value)
{
f((byte)value);
}
questo consentirà f(0)
Con Java 7 e versioni successive, è possibile specificare un byte letterale in questo modo:
byte aByte = (byte)0b00100001;
Riferimento: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html