-2
votes

Valeurs de chaîne dans la mise en option

Imaginez un en option.fnullable code> Vérifiez l'affectation à un String CODE>:

String result = Optional.ofNullable(class1)
                .map(Class1::getClass2)
                .map(Class2::getResult);


4 commentaires

Je ne suis pas sûr de comprendre votre question entièrement. Mais la classe en option est conçue pour contenir une valeur ou non, et est souvent utilisée comme alternative à null . La méthode mappe ne renvoie pas une chaîne (correspondante> (car si elle l'a fait, la valeur de retour pourrait être null ), mais renvoie plutôt un En option contenant la nouvelle valeur. Afin d'obtenir le résultat, vous pouvez appeler get () , qui renvoie également la chaîne résultante, mais pourrait également lancer un nosuchelementException . Pour revenir à la valeur résultante ou à une valeur de repli, vous devez appeler orelse (FallbackValue) .


Tostring renvoie une représentation de la facultative non de la valeur contenue, le cas échéant.


@MCeMperor est là un moyen d'appeler get () et également appeler orelse () dans la même chaîne?


@Sotiriosdelimanolis merci - je comprends que maintenant et cela semble obtenir () est ce que je veux. Mais pour combiner avec une clause orelse () au cas où il n'a pas de valeur.


3 Réponses :


1
votes

Si vous voulez résultat pour être null si quelque chose le long de la voie retourne null, alors do orelse (null) xxx


0 commentaires

3
votes

Le type de retour de mappe code> est en option code>, afin d'obtenir une valeur réelle que vous devez appeler orelse code> avec le type de retour de t code>.

Ceci est la implémentation code> code> si le en option code>: p> xxx pré>

Donc, appeler tostring code> Vous n'obtiendrez jamais la valeur réelle, mais une valeur enveloppée sur en option code>, tandis que orelse code> vous retournera la valeur par défaut fournie. Valeur. P>

Voyons la différence: p> xxx pré>

sortie: p> xxx pré>

avec avec null code>: p> xxx pré>

sortie: p> xxx pré>

tout en utilisant orelse code>: xxx pré>

sortie: p> xxx pré>

afin que vous puissiez voir qu'il existe différents objectifs de ces méthodes. P>

Et la réponse à votre commentaire: p>

" est-il un moyen d'appeler get () et également appeler Orelse () dans la même chaîne? Strong>" p>

/**
 * If a value is present, returns the value, otherwise returns
 * {@code other}.
 *
 * @param other the value to be returned, if no value is present.
 *        May be {@code null}.
 * @return the value, if present, otherwise {@code other}
 */
public T orElse(T other) {
    return value != null ? value : other;
}


0 commentaires

1
votes

Je comprends ajouter l'orelse ("") comme cela affectera un résultat à un vide Chaîne. P>

Cela ne sonne pas comme si vous me le compreniez parce que ce n'est pas une bonne description de ce qui se passe. Facultatif.Orelse Code> Est-ce que ce qui suit: Si la facultative contient une valeur, renvoyez cette valeur. Si cela ne contient pas de valeur, renvoyez tout argument que vous avez donné. P>

Il est sémantiquement équivalent aux éléments suivants: p> xxx pré>

appelant Tostring code>, alors qu'il satisfera le compilateur, est pas fort> ce que vous voulez faire. Vous convertissez l'objet code> en option EM> en option em> à une chaîne, ne pas obtenir la chaîne de l'intérieur! Bien que votre chaîne soit incluse em>, ceci est uniquement à cause de la manière dont les développeurs JDK ont décidé de mettre en œuvre Tostring code>. Ils n'auraient également pas à ne pas avoir fourni de mise en œuvre, vous laissant avec juste le Comportement par défaut . p>

appelant Tostring code> sur un en option code> doit fondamentalement ne jamais être invoqué à l'extérieur de la journalisation. Il suffit de déboguer des informations. Si vous le faites, alors des informations sur le wrapper code> en option (code> en option seront également imprimées, ce qui n'est certainement pas ce que vous voulez. P>

System.out.println(Optional.empty());   // Optional.empty
System.out.println(Optional.of("foo")); // Optional[foo]


0 commentaires