Respuestas:
No puedes. Una constante numérica básica se considera un entero (o largo si va seguido de una "L"), por lo que debe convertirlo explícitamente en un byte para pasarlo como parámetro. Que yo sepa, no hay atajos.
byte b(int i) { return (byte) i; }
algún lugar e importarlo estáticamente. Entonces puedes escribir f (b (10)).
Tienes que echar, me temo:
f((byte)0);
Creo que realizará la conversión adecuada en tiempo de compilación en lugar de tiempo de ejecución , por lo que en realidad no causará penalizaciones de rendimiento. Es un inconveniente :(
Puede usar un byte literal en Java ... más o menos.
byte f = 0;
f = 0xa;
0xa
(literal literal) se convierte automáticamente en byte. No es un literal de byte 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 lanzar de la siguiente manera:
foo( (byte) 0xa );
Pero tenga en cuenta que todo esto se compilará, y están usando "literales de byte":
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
1
es un int literal, pero se double d = 1;
compila muy bien.
byte b(int i){}
, luego b(1)
tan larga y menos difícil que f=1
.
Si está pasando literales en código, ¿qué le impide declararlo con anticipación?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
para no tener algunos errores de extensión de signos desagradables.
¿Qué hay de anular el método con
void f(int value)
{
f((byte)value);
}
esto permitirá f(0)
Con Java 7 y versiones posteriores, puede especificar un byte literal de esta manera:
byte aByte = (byte)0b00100001;
Referencia: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html