Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在API的CharSequence和String之间进行选择_Java_String_Charsequence - Fatal编程技术网

Java 在API的CharSequence和String之间进行选择

Java 在API的CharSequence和String之间进行选择,java,string,charsequence,Java,String,Charsequence,。Java库中的许多方法都接受CharSequenceso。一些类具有String方法(例如,Writer.write(String)),并且还使用等效的CharSequence方法(例如,Writer.append(CharSequence))实现了appendeable) 如果我正在编写一个委托给此类类的类,并且需要一些文本输入,我可以选择将该输入作为字符串或字符序列。选择后者,通过为客户机提供更多选项,使类更加灵活。但我没有看到太多这样的代码:文本参数几乎总是字符串,而不是字符序列。使用C

。Java库中的许多方法都接受
CharSequence
so。一些类具有
String
方法(例如,
Writer.write(String)
),并且还使用等效的
CharSequence
方法(例如,
Writer.append(CharSequence)
)实现了
appendeable

如果我正在编写一个委托给此类类的类,并且需要一些文本输入,我可以选择将该输入作为
字符串
字符序列
。选择后者,通过为客户机提供更多选项,使类更加灵活。但我没有看到太多这样的代码:文本参数几乎总是
字符串
,而不是
字符序列
。使用
CharSequence
有缺点吗?有演出热播吗?或者仅仅是程序员的交互作用或无知导致使用
String
而不是
CharSequence

比较

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(String text) {
      writer.write("<!-- ");
      writer.write(text);
      writer.write(" -->");
   }
}
classxmlwriter{
私人最终撰稿人;
//这里有更多的东西
public void writeComment(字符串文本){
作者:写(“”);
}
}

classxmlwriter{
私人最终撰稿人;
//这里有更多的东西
public void writeComment(字符序列文本){
作者:写(“”);
}
}
引用Javadoc:

此接口不会细化和方法的常规契约。因此,测试实现
CharSequence
的两个对象是否相等的结果通常是未定义的。每个对象可以由不同的类实现,并且不能保证每个类都能够测试其实例是否与其他类的实例相等。因此,将任意
CharSequence
实例用作集合中的元素或映射中的键是不合适的


因此,在使用charsequence替换字符串之前,我们必须三思而后行。

您的逻辑对我很有意义。通过使用CharSequence,您可以允许调用代码提供StringBuffer/StringBuilder,而无需对其调用toString(),这种情况经常发生。@Andy是的,我在编写问题时考虑了
StringBuilder
。请参阅此问题稍后的副本。有关更多讨论,请参阅java中的问题及其副本。和。作为较新问题的重复关闭,因为该问题吸引了一些彻底的答案。您认为仅输出文本的方法,例如我的示例,应该使用
CharSequence
,而不是
String
?回答得好,感谢引用Javadoc。但我不同意你的结论。使用某些API返回的
CharSequence
的问题属于调用API的程序员,而不是API的作者。如果调用程序的程序员将生成的文本用于某个目的,例如地图中的一个键或添加到集合中,那么他们应该是需要三思而后行的人。然后他们应该直接打电话。API的作者不应该担心以后的误用。
class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(CharSequence text) {
      writer.write("<!-- ");
      writer.append(text);
      writer.write(" -->");
   }
}