提问人:Raedwald 提问时间:12/9/2011 最后编辑:CommunityRaedwald 更新时间:11/13/2019 访问量:3922
在 API 的 CharSequence 和 String 之间进行选择 [duplicate]
Choosing between CharSequence and String for an API [duplicate]
问:
String
是 CharSequence。Java 库中的许多方法都接受,因此它们可以更普遍地运行。有些类有一个方法(例如,),并且还使用等效方法(例如,)实现。
CharSequence
String
Writer.write(String)
Appendable
CharSequence
Writer.append(CharSequence)
如果我正在编写一个委托给此类类的类,并且需要一些文本输入,我可以选择该输入是 a 或 .选择后者通过为客户提供更多选择,使类更加灵活。但是我没有看到很多代码这样做:文本参数几乎总是 a 而不是 .使用有缺点吗?性能是否受到影响?还是只是程序员的无知或无知导致了使用而不是?String
CharSequence
String
CharSequence
CharSequence
String
CharSequence
比较
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(String text) {
writer.write("<!-- ");
writer.write(text);
writer.write(" -->");
}
}
跟
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(CharSequence text) {
writer.write("<!-- ");
writer.append(text);
writer.write(" -->");
}
}
答:
16赞
Dhananjay
12/9/2011
#1
引用 CharSequence
Javadoc:
此接口不细化
equals
和hashCode
方法的一般约定。因此,测试实现相等的两个对象的结果通常是未定义的。每个对象可以由不同的类实现,并且不能保证每个类都能够测试其实例是否与另一个类的实例相等。因此,不宜将任意实例用作集合中的元素或映射中的键。CharSequence
CharSequence
因此,IMO:在使用 CharSequnce 作为 String 的替代品之前,我们必须三思而后行。
评论
0赞
Raedwald
12/12/2011
你会说只输出文本的方法,比如我的例子,应该使用而不是?CharSequence
String
1赞
Basil Bourque
11/13/2019
好答案,感谢您引用 Javadoc。但我不同意你的结论。使用某些 API 返回的问题属于调用程序员,而不是 API 的作者。如果调用程序员将生成的文本用于某个目的,例如映射中的键或添加到集合中,他们应该是三思而后行的人。然后,他们应该简单地调用 CharSequence::toString
。API 的作者以后不必担心滥用。CharSequence
评论
StringBuilder