gpt4 book ai didi

java - 何时在 API 中使用 CharSequence

转载 作者:IT老高 更新时间:2023-10-28 20:39:01 24 4
gpt4 key购买 nike

我正在为一个包设计一个公共(public)接口(interface) (API)。我想知道,我应该通常使用 CharSequence 而不是 String。 (我主要说的是公共(public)接口(interface))。

这样做有什么缺点吗?这被认为是一种好的做法吗?

如果将它用于类似标识符的目的(当值与基于哈希的容器中的集合匹配时)呢?

最佳答案

CharSequence在通用库中很少使用。当您的主要用例是字符串处理(操作、解析等)时,通常应该使用它。

一般来说你可以用 CharSequence 做任何你可以用 String 做的事情(很简单,因为你可以 convert every CharSequence into a String ) .但是有一个重要的区别:CharSequence 不能保证是不可变的! 每当您处理 String 并在两个不同的时间点检查它时,您可以确定它每次都具有相同的值。

但对于 CharSequence 来说,这不一定是真的。例如,有人可以通过 StringBuilder进入你的方法并修改它当你用它做某事时,这可能会破坏很多理智的代码。

考虑这个伪代码:

public Object frobnicate(CharSequence something) {
Object o = getFromCache(something);
if (o == null) {
o = computeValue(something);
putIntoCache(o, something);
}
return o;
}

这看起来很无害,如果您在这里使用了 String,它几乎可以正常工作(除了该值可能会被计算两次)。但是如果 somethingCharSequence 那么它的内容可能会在 getFromCache 调用和 computeValue 调用之间改变。或者更糟:在 computeValue 调用和 putIntoCache 调用之间!

因此:只有接受 CharSequence 如果有很大的优势并且您知道缺点

如果您接受 CharSequence,您应该记录您的 API 如何处理可变 CharSequence 对象。例如:“在方法执行时修改参数会导致未定义的行为。”

关于java - 何时在 API 中使用 CharSequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com