当前位置: 首页 > 面试题库 >

何时在API中使用CharSequence

越勇锐
2023-03-14
问题内容

我正在为程序包设计一个公共接口(API)。我想知道,我应该CharSequence一般使用代替String。(我主要是在谈论公共接口)。

这样做有什么弊端吗?这被认为是一种好习惯吗?

将其用于类似标识符的目的(将值与基于散列的容器中的集合进行匹配时)如何处理?


问题答案:

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

一般来说
,你可以做一个东西CharSequence,你可以用做String(平凡的,因为你可以每次转换CharSequenceString)。但是有一个重要的区别:
不能保证 ACharSequence是不变的!每当处理a
String并在两个不同的时间点对其进行检查时,都可以确保每次都具有相同的值。


但是对于CharSequence那不一定是正确的。例如,有人可以将a传递给StringBuilder您的方法并
在您对其执行操作时对其进行 修改,这可能会破坏许多理智的代码。

考虑以下伪代码:

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

这看起来无害,如果您在String这里使用过,它通常可以正常工作(除非可能会计算两次该值)。但是,如果something为,CharSequence则其内容可以在getFromCache呼叫和computeValue呼叫之间改变。或更糟糕的是:在computeValue通话和putIntoCache通话之间!

因此: 只有CharSequence优势很大 并且 知道缺点的情况下 接受。

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



 类似资料:
  • Spring Security文档声明 18.3何时使用CSRF保护 什么时候应该使用CSRF保护?我们的建议是,对正常用户可以通过浏览器处理的任何请求使用CSRF保护。如果只创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护。 但很明显,当您没有加密通信(即没有SSL)时,它允许一些场景。我想知道更多关于在什么情况下你仍然希望使用CSRF保护。

  • 何时为: 有用吗? 我在pom.xml中尝试了使用和不使用这种依赖关系,但没有任何变化。在我的情况下,在这两种情况下,一切都正常工作。是否存在缺少此依赖项会产生错误的情况?

  • 我试图理解Kafka的事务性API。此链接定义原子读-进程-写周期如下: 首先,让我们考虑原子读-进程-写周期是什么意思。简而言之,它意味着如果应用程序在某个主题分区tp0的偏移量X处消耗消息A,并在对消息A进行一些处理后将消息B写入主题分区tp1,使得B=F(A),那么只有当消息A和B被认为成功消耗并一起发布或根本不发布时,读-进程-写周期才是原子的。 它还说: 使用为至少一次交付语义配置的va

  • 我使用了Spring文档中描述的映射的两种方法。 使用注释 有一个字段的名称没有任何注释 在我之前的项目中,我们使用MongoDB作为DAO操作的数据库和Spring Data。它对和都没有任何问题。 现在我们将DocumentDB与MongoDB API一起使用(因为Spring数据不支持DocumentDB)。我可以使用所有Spring数据方法,但不能使用自定义id。 下面是我的实体: 这是道

  • 当我尝试使用基于本教程的MapFragment时,并且我使用以下布局:

  • 问题内容: 我是pthread的新手,我正试图了解它。我看到了一些类似以下的示例。 我可以看到API阻止了它,并且我看到了一些示例,其中主要功能都被API阻止了。我不明白什么时候使用什么? 我指的是以下站点-https://computing.llnl.gov/tutorials/pthreads/。我无法获得何时使用和何时使用的概念。 有人可以解释一下吗?此外,将感谢一个很好的pthread教程