Comment convertir String
en CharSequence
en Java?
Réponses
Trop de publicités?Depuis que String
EST UN CharSequence
, vous pouvez passer une String
partout où vous avez besoin d'un CharSequence
, ou assigner une String
à un CharSequence
:
CharSequence cs = "string";
String s = cs.toString();
foo(s); // imprime "string"
public void foo(CharSequence cs) {
System.out.println(cs);
}
Si vous voulez convertir un CharSequence
en String
, il suffit d'utiliser la méthode toString
qui doit être implémentée par chaque réalisation concrète de CharSequence
.
CharSequence est une interface et String est l'une de ses implémentations autres que StringBuilder, StringBuffer et bien d'autres.
Donc, tout comme vous utilisez NomInterface i = new SonImplementation()
, vous pouvez utiliser CharSequence cs = new String("chaîne")
ou simplement CharSequence cs = "chaîne";
C'est une bonne question! Vous pourriez rencontrer des problèmes si vous invoquez une API qui utilise des génériques et que vous souhaitez attribuer ou retourner ce résultat avec un sous-type différent du type générique. Java 8 aide à transformer:
List input = new LinkedList<>(Arrays.asList("a", "b", "c"));
List result;
// result = input; // <-- Incompatibilité de types : impossible de convertir de List en List
result = input.stream().collect(Collectors.toList());
System.out.println(result);
Tentative de fournir un peu de contexte possible à la question de l'OP en affichant mes propres problèmes. Je travaille en Scala, mais les messages d'erreur font tous référence à des types Java, et le message d'erreur ressemble beaucoup au compilateur se plaignant que CharSequence n'est pas une String. J'ai confirmé dans le code source que String implémente l'interface CharSequence, mais le message d'erreur attire l'attention sur la différence entre String et CharSequence tout en cachant la véritable source du problème :
scala> cols
res8: Iterable[String] = List(Item, a, b)
scala> val header = String.join(",", cols)
:13: error: méthode en surcharge valeur join avec les alternatives :
(x$1: CharSequence,x$2: java.lang.Iterable[_ <: CharSequence])String
(x$1: CharSequence,x$2: CharSequence*)String
ne peut pas être appliqué à (String, Iterable[String])
val header = String.join(",", cols)
J'ai pu résoudre ce problème en réalisant que le problème n'était pas String / CharSequence, mais plutôt une incompatibilité entre java.lang.Iterable et l'Iterable intégré de Scala.
scala> val header = String.join(",", coll: _*)
header: String = Item,a,b
Mon problème particulier peut également être résolu via les réponses sur Scala: join an iterable of strings
En résumé, l'OP et d'autres personnes confrontées à des problèmes similaires devraient analyser de très près les messages d'erreur et voir quelles autres conversions de type pourraient être impliquées.
- Réponses précédentes
- Plus de réponses