¿Cómo se especifica un byte literal en Java?
si tengo un metodo
void f(byte b);
¿Cómo puedo llamarlo con un argumento numérico sin emitir?
f(0);
da un error.
No puedes. Una constante numérica básica se considera un número entero (o largo si va seguida de una "L"), por lo que debes reducirla explícitamente a un byte para pasarla como parámetro. Hasta donde yo sé, no hay atajos.
Tienes que lanzar, me temo:
f((byte)0);
Creo que eso realizará la conversión adecuada en tiempo de compilación en lugar de en tiempo de ejecución , por lo que en realidad no causará penalizaciones de rendimiento. Es simplemente un inconveniente :(
Puedes usar un byte literal en Java... más o menos.
byte f = 0;
f = 0xa;
0xa
(int literal) se convierte automáticamente en byte. No es un byte literal real (ver JLS y comentarios a continuación), pero si grazna como un pato, lo llamo pato.
Lo que no puedes hacer es esto:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Tienes que emitir de la siguiente manera:
foo( (byte) 0xa );
Pero tenga en cuenta que todos estos se compilarán y utilizarán "bytes literales":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Por supuesto, esto también se compila.
foo( (byte) 1 ); //compiles