czy istnieje odpowiednik Javy dla operatora koalescencyjnego null (??) w C#? [duplikat]
Czy można zrobić coś podobnego do poniższego kodu w Javie
int y = x ?? -1;
6 answers
Niestety-nie. Najbliższe co możesz zrobić to:
int y = (x != null) ? x : -1;
Oczywiście, możesz zawinąć to w metody biblioteczne, jeśli czujesz taką potrzebę (jest mało prawdopodobne, aby znacznie zmniejszyć długość), ale na poziomie składni nie ma nic bardziej zwięzłego dostępnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-07 17:36:55
Guava ma metodę, która robi coś podobnego o nazwie MoreObjects.firstNonNull (T,T) .
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
To jest bardziej pomocne, gdy masz coś takiego
int y = firstNonNull(calculateNullableValue(), -1);
Ponieważ pozwala to uniknąć dwukrotnego wywołania potencjalnie drogiej metody lub dwukrotnego deklarowania zmiennej lokalnej w kodzie jako odwołania się.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 07:23:28
Krótka odpowiedź: Nie
Najlepsze, co możesz zrobić, to utworzyć statyczną metodę narzędzia (tak, aby można ją zaimportować za pomocą składni import static
)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
Powyższe jest równoważne metodzie Guava firstNonNull
przez @ ColinD, ale można ją rozszerzyć bardziej ogólnie
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 07:57:42
Nie, i należy pamiętać, że funkcje obejścia nie są dokładnie takie same, prawdziwy operator null łączący zwarcia, takie jak & & i / / do, co oznacza, że będzie próbował ocenić drugie wyrażenie tylko wtedy, gdy pierwsze jest null.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-16 18:06:06
ObjectUtils.firstNonNull(T...)
, z Apache Commons Lang 3 jest inną opcją. Wolę ten becuase w przeciwieństwie do guawy, ta metoda nie rzuca Exception
. Po prostu zwróci null
;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 22:45:08
Prymitywy w Javie nigdy nie mogą być null, więc stwierdzenie to nie ma sensu koncepcyjnie. Jednak klasy wrappera (Integer, Character, itd.), podobnie jak każda inna instancyjna klasa może być null.
Poza tym, nie ma składni krótkiej ręki dla operatora koalescencyjnego null. Musisz użyć rozszerzonego formularza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-19 17:01:18