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

“静态”模式不应该总是静态的吗?

楚元章
2023-03-14
问题内容

我刚刚在一些我未编写的代码中发现了一个错误,我对此感到有些惊讶:

Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");
Matcher matcher = pattern.matcher(s);

尽管该代码在输入数据上失败了很多 _(因为它试图以17.01.2011格式查找日期并返回诸如10396/2011之类的东西,然后由于无法解析日期而崩溃,但这
确实是错误 的)这个问题的重点;)_我想知道:

  • Pattern.compile 的要点之一不是要进行速度优化(通过预编译正则表达式)?

  • 难道不是所有的“静态”模式都 总是 编译成静态模式吗?

在网络上有很多示例,总是使用 Pattern.compile 重新编译相同的模式,我开始怀疑自己是否在看东西。

不是(假设字符串是静态的,因此不是动态构造的):

static Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");

总是比非静态模式引用更可取?


问题答案:
  1. 是的,预编译a的全部目的Pattern是只执行一次。
  2. 它实际上取决于您将如何使用它,但是通常,存储在static字段中的预编译模式应该没问题。(与Matchers 不同,它们不是线程安全的,因此实际上不应存储在字段中,无论是否为静态)。

静态初始值设定项中有关编译模式的唯一警告是,如果该模式未编译且静态初始值设定项引发异常,则错误的来源可能非常令人讨厌。这是一个较小的可维护性问题,但可能值得一提。



 类似资料:
  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:

  • 我有一个简单的模式,有一个索引方法从数据库中获取数据 模态:国家 现在我想从控制器调用这个函数: 控制器: 为此,我以这种方式创建了一个正面: 创建了一个提供者 在config/app.php中注册了提供程序 创建了门面 在config/app.php中注册别名 第1步-提供商: php artisan make:提供者NationServiceProvider 第2步:在config/app.p

  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。

  • 问题内容: 我在代码中使用Java Callable Future。以下是我使用future和callables的主要代码- 下面是我的Task类,该类实现Callable接口,我需要根据所拥有的主机名生成URL,然后使用调用SERVERS RestTemplate。如果第一个主机名中有任何异常,那么我将为另一个主机名生成URL,然后尝试拨打电话。 所以我的问题应该声明RestTemplate为静

  • 问题内容: 我是一名Java开发人员,他 开始 掌握依赖注入的全部功能,突然间我意识到,没有办法注入静态方法。因此,我想到了: 静态方法是DI反模式吗? 更重要的是:如果我要接受依赖注入,这是否意味着我需要停止对静态方法进行编码?我问,因为没有办法在单元测试期间模拟它们并注入模拟静态变量,这对我来说是个很大的选择。 编辑 :我知道一种“包装”和注入现有的静态方法的通用方法是这样的: …但是我没有问

  • 我有一个带有下面代码的php文件,我收到错误: 严格标准:非静态方法LinkCore::GetImageLink()不应静态调用,假设$this来自....中的不兼容上下文。 但如果我改变这行: 我得到了 分析错误:语法错误,在/xxx/xxx/publ_html/modules/supplierreports/htmlTemplateCustompdf.php第44行中出现意外的“->”(T_O