Si j'ai une méthode
void f(byte b);
comment puis-je l'appeler avec un argument numérique sans casting?
f(0);
donne une erreur.
Vous ne pouvez pas. Une constante numérique de base est considérée comme un entier (ou un long si elle est suivie d'un "L"), vous devez donc explicitement la convertir en octet pour la passer en paramètre. Pour autant que je sache, il n'y a pas de raccourci.
Vous devez lancer, j'ai peur:
f((byte)0);
Je crois que cela va effectuer la conversion appropriée à compiler - heure au lieu de exécution heure, donc cela ne va pas réellement causer de pénalité de performance. C'est juste gênant :(
Vous pouvez utiliser un littéral d'octet en Java ... en quelque sorte.
byte f = 0;
f = 0xa;
0xa
(littéral int) est automatiquement converti en octet. Ce n'est pas un vrai octet littéral (voir JLS & commentaires ci-dessous), mais si ça plaisante comme un canard, je l'appelle un canard.
Ce que vous ne pouvez pas faire, c'est ceci:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Vous devez lancer comme suit:
foo( (byte) 0xa );
Mais gardez à l'esprit que ceux-ci seront tous compilés et qu'ils utilisent des "littéraux d'octets":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Bien sûr, cela compile aussi
foo( (byte) 1 ); //compiles
Si vous passez des littéraux dans le code, qu'est-ce qui vous empêche de simplement le déclarer à l'avance?
byte b = 0; //Set to desired value.
f(b);
Qu'en est-il de remplacer la méthode avec
void f(int value)
{
f((byte)value);
}
cela permettra à f(0)