Est-il possible de faire quelque chose de similaire au code suivant en Java
int y = x ?? -1;
Malheureusement non. Le plus proche que vous puissiez faire est:
int y = (x != null) ? x : -1;
Bien sûr, vous pouvez intégrer cela dans les méthodes de bibliothèque si vous en sentez le besoin (il est peu probable que vous réduisiez la longueur), mais au niveau syntaxique, rien de plus succinct n'est disponible.
Guava a une méthode qui fait quelque chose de similaire appelé MoreObjects.firstNonNull (T, T) .
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
Ceci est plus utile lorsque vous avez quelque chose comme
int y = firstNonNull(calculateNullableValue(), -1);
dans la mesure où cela vous évite d'appeler deux fois la méthode potentiellement coûteuse ou de déclarer une variable locale dans votre code à référencer deux fois.
Réponse courte: non
Le mieux que vous puissiez faire est de créer une méthode d’utilité statique (afin de l’importer à l’aide de import static
syntaxe)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
Ce qui précède est équivalent à la méthode de Guava firstNonNull
de @ColinD, mais cela peut être étendu de manière plus générale
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
Non, et sachez que les fonctions de solution de contournement ne sont pas exactement les mêmes, un véritable court-circuit opérateur de fusion nul tel que && et || do, ce qui signifie qu'il ne tentera d'évaluer la deuxième expression que si la première est nulle.
ObjectUtils.firstNonNull(T...)
, d’Apache Commons Lang 3 est une autre option. Je préfère cela car contrairement à Guava, cette méthode ne jette pas un Exception
. Il retournera simplement null
;
Les primitives dans Java ne peuvent jamais être null, cette instruction n'a donc aucun sens conceptuellement. Cependant, les classes wrapper (Integer, Character, etc.), ainsi que toute autre classe instanciable peuvent être null .
Outre ce fait, il n'y a pas de syntaxe abrégée pour un opérateur de coalescence nul. Vous devez utiliser le formulaire développé.