Як перетворитись String
на CharSequence
Java?
Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
Як перетворитись String
на CharSequence
Java?
Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
Відповіді:
Оскільки String
IS-A CharSequence
, ви можете передати String
туди, де вам потрібно CharSequence
, або призначити String
його CharSequence
:
CharSequence cs = "string";
String s = cs.toString();
foo(s); // prints "string"
public void foo(CharSequence cs) {
System.out.println(cs);
}
Якщо ви хочете перетворити a CharSequence
в String
, просто використовуйте toString
метод, який повинен бути реалізований кожною конкретною реалізацією CharSequence
.
Сподіваюся, це допомагає.
CharSequence
a String
без явного складу.
String
а CharSequence
.
CharSequence
. Він просто привласнює екземпляр String
до CharSequence
змінної, і так як String
реалізує CharSequence
інтерфейс, код працює.
Пряма відповідь:
String s = "Hello World!";
// String => CharSequence conversion:
CharSequence cs = s; // String is already a CharSequence
CharSequence
є інтерфейсом, і String
клас реалізує CharSequence
.
CharSequence - це інтерфейс, а String - це одна з його реалізацій, крім StringBuilder, StringBuffer та багатьох інших.
Отже, так само, як ви користуєтесь InterfaceName i = new ItsImplementation()
, ви можете використовувати CharSequence cs = new String("string")
або простоCharSequence cs = "string";
Можна використовувати
CharSequence[] cs = String[] {"String to CharSequence"};
Спроба надати певний (можливий) контекст для питання ОП, розміщуючи власну проблему. Я працюю в Scala, але повідомлення про помилки я отримую всі типові Java-повідомлення, і повідомлення про помилку багато читає, як компілятор, нарікаючи, що CharSequence не є рядком. У вихідному коді я підтвердив, що String реалізує інтерфейс CharSequence, але повідомлення про помилку привертає увагу до різниці між String та CharSequence, приховуючи реальне джерело проблеми:
scala> cols
res8: Iterable[String] = List(Item, a, b)
scala> val header = String.join(",", cols)
<console>:13: error: overloaded method value join with alternatives:
(x$1: CharSequence,x$2: java.lang.Iterable[_ <: CharSequence])String <and>
(x$1: CharSequence,x$2: CharSequence*)String
cannot be applied to (String, Iterable[String])
val header = String.join(",", cols)
Мені вдалося виправити цю проблему, усвідомивши, що проблема була не String / CharSequence, а скоріше невідповідністю між java.lang.Iterable та вбудованим Iterable Scala.
scala> val header = String.join(",", coll: _*)
header: String = Item,a,b
Мою конкретну проблему також можна вирішити за допомогою відповідей у Scala: приєднайтеся до ітерабельного рядка
Підсумовуючи, ОП та інші, хто стикається з подібними проблемами, повинні дуже детально проаналізувати повідомлення про помилки та побачити, які можуть бути пов'язані перетворення інших типів.