Odpowiedzi:
Nie możesz. Podstawowa stała numeryczna jest uważana za liczbę całkowitą (lub długą, jeśli następuje po niej „L”), więc musisz jawnie sprowadzić ją do bajtu, aby przekazać ją jako parametr. O ile mi wiadomo, nie ma skrótu.
byte b(int i) { return (byte) i; }
gdzieś zdefiniować prostą metodę pomocniczą i zaimportować ją statycznie. Następnie możesz napisać f (b (10)).
Obawiam się, że musisz rzucić:
f((byte)0);
Wierzę, że wykona odpowiednią konwersję w czasie kompilacji zamiast w czasie wykonywania , więc tak naprawdę nie spowoduje to obniżenia wydajności. To po prostu niewygodne :(
Możesz użyć literału bajtu w Javie ... w pewnym sensie.
byte f = 0;
f = 0xa;
0xa
(int dosłowne) jest automatycznie przesyłane do bajtów. To nie jest prawdziwy bajt dosłowny (patrz JLS i komentarze poniżej), ale jeśli kwacze jak kaczka, nazywam to kaczką.
Nie możesz tego zrobić:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Musisz rzucić w następujący sposób:
foo( (byte) 0xa );
Pamiętaj jednak, że wszystkie się skompilują i używają „literałów bajtowych”:
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Oczywiście to też się kompiluje
foo( (byte) 1 ); //compiles
1
jest int dosłowne, ale double d = 1;
dobrze się kompiluje.
byte b(int i){}
, a następnie b(1)
tak długi i mniej trudny niż f=1
.
Jeśli przekazujesz literały w kodzie, co powstrzymuje cię od zwykłego zadeklarowania go przed czasem?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
aby nie dostać paskudnych błędów związanych z przedłużaniem znaków.
Co z zastąpieniem metody za pomocą
void f(int value)
{
f((byte)value);
}
to pozwoli f(0)
W Javie 7 i nowszych wersjach możesz określić literał bajtowy w następujący sposób:
byte aByte = (byte)0b00100001;
Odniesienie: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html