Respostas:
Você não pode. Uma constante numérica básica é considerada um número inteiro (ou longo, se seguido por um "L"), portanto, você deve explicitamente fazer o downcast para um byte para passá-lo como parâmetro. Tanto quanto eu sei, não há atalho.
byte b(int i) { return (byte) i; }
algum lugar e importá-lo estaticamente. Então você pode escrever f (b (10)).
Você tem que lançar, eu tenho medo:
f((byte)0);
Acredito que realizará a conversão apropriada no momento da compilação, em vez do tempo de execução , portanto não causará penalidades de desempenho. É apenas inconveniente :(
Você pode usar um literal de byte em Java ... mais ou menos.
byte f = 0;
f = 0xa;
0xa
(int literal) é convertido automaticamente em byte. Não é um literal de byte real (consulte JLS e comentários abaixo), mas se ele parecer um pato, eu o chamo de pato.
O que você não pode fazer é o seguinte:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Você deve transmitir da seguinte maneira:
foo( (byte) 0xa );
Mas lembre-se de que tudo isso será compilado e eles estão usando "literais de bytes":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Claro que isso compila também
foo( (byte) 1 ); //compiles
1
é um literal int, mas double d = 1;
compila perfeitamente.
byte b(int i){}
, então b(1)
, pelo menos e mais complicado que f=1
.
Se você está passando literais no código, o que impede você de simplesmente declará-lo com antecedência?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
para que eu não tivesse alguns erros de extensão de sinal desagradáveis.
Que tal substituir o método por
void f(int value)
{
f((byte)value);
}
isso permitirá f(0)
Com o Java 7 e a versão posterior, você pode especificar um literal de byte desta maneira:
byte aByte = (byte)0b00100001;
Referência: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html