3

编写表单代码时:

String.format("blah %s %s", value1);

IntelliJ 将警告格式模式的数量与实际参数不匹配:too few arguments for format string (found:1, expected: 2).

有没有办法将此逻辑应用于自定义方法?例如:

/** @see String#format(String, Object...) */
public String myMethod(String msg, Object... args){
  return String.format("blah " + msg, args);
}
...

myMethod("%s %s", value1);

关键是我想让 IDEA 告诉我我搞砸了。

如示例所示,我已经记录了这些委托给String.format().

理想情况下,我宁愿避免复制该文档——尽管我愿意将其转换为自定义格式,或者可能是注释(尽管最好不是 IDEA 注释)。

4

2 回答 2

7

Stephen Friedrich 的回答指出了正确的方向,但截图不足以理解如何使用该功能。以下是如何让它工作,更详细一点:

  1. 在“其他格式化程序类”框中,输入您创建的包含自定义format()方法的任何自定义类。因此,在 OP 的情况下,如果他们的myMethod()方法属于某个com.acme.MyClass类,那么他们就会进入com.acme.MyClass那里。

如果调用了他们的自定义格式化方法,这将是 OP 需要做的所有事情format()。但是,他们的自定义格式化方法有不同的名称,因此他们还需要执行第二步。

  1. 在“其他格式化程序方法”框中,输入您创建的任何自定义方法的名称,它们的工作方式类似于format(). 因此,在 OP 的情况下,字符串myMethod将被添加到那里。请注意,您不应包含类限定符、括号或参数,只需包含方法的名称。

从外观上看,在“其他格式化程序方法”框中输入的每个方法名称都适用于在“其他格式化程序类”框中输入的所有类,即使只有一个类实际上包含这样的方法。此外,即使没有一个类包含这样的方法,或者具有这样名称的方法存在,但它们没有必要的签名,也不会出错void (String format, Object... arguments)

因此,这个功能似乎是以一种非常 hacky 的方式实现的,这是我们不习惯从 JetBrains 看到的那种方式。另外有趣的是,功能实现中的hackiness使用户更难弄清楚如何使用该功能。

我认为这个功能最好在格式化方法上加上一个额外的注释来实现。(但我们不要在这里争论,这是一个问答网站。)

于 2018-12-02T15:47:33.357 回答
3

您可以在检查设置中配置其他“格式化程序方法”:

在此处输入图像描述

如果您将检查配置文件配置为“项目默认值”,并签入相关文件(在 .idea 文件夹中),那么签出项目并使用 IDEA 的每个人都将从中受益。

于 2017-10-30T08:42:50.697 回答