222 votes

Comment spécifier un octet littéral en Java ?

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.

274voto

Robin Points 1683

Vous ne pouvez pas. Une constante numérique de base est considérée comme un nombre entier (ou long s'il est suivi d'un "L"), vous devez donc la convertir explicitement en octet pour la passer en paramètre. Pour autant que je sache, il n'existe pas de raccourci.

114voto

Jon Skeet Points 692016

Vous devez faire un casting, j'en ai peur :

f((byte)0);

Je pense que cela effectuera la conversion appropriée à compiler -au lieu de exécution temps, donc cela ne va pas réellement causer des pénalités de performance. C'est juste un inconvénient :(

28voto

RickHigh Points 424

Vous pouvez utiliser un octet littéral 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 littéral d'octet (voir JLS et les commentaires ci-dessous), mais si ça fait coin-coin, j'appelle ça un canard.

Ce que vous ne pouvez pas faire, c'est ça :

void foo(byte a) {
   ...
}

 foo( 0xa ); // will not compile

Vous devez faire le casting comme suit :

 foo( (byte) 0xa ); 

Mais gardez à l'esprit qu'elles seront toutes compilées et qu'elles utilisent des "octets littéraux" :

void foo(byte a) {
   ...
}

    byte f = 0;

    foo( f = 0xa ); //compiles

    foo( f = 'a' ); //compiles

    foo( f = 1 );  //compiles

Bien sûr, cela se compile aussi

    foo( (byte) 1 );  //compiles

11voto

yock Points 3729

Si vous passez des littéraux dans le code, qu'est-ce qui vous empêche de simplement les déclarer à l'avance ?

byte b = 0; //Set to desired value.
f(b);

5voto

Boris Pavlović Points 22207

Pourquoi ne pas remplacer la méthode par

void f(int value)
{
  f((byte)value);
}

cela permettra f(0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X