gpt4 book ai didi

java - 方法参数的编译时验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:07 27 4
gpt4 key购买 nike

我在这里发现了一些类似的问题,但不完整的答案并没有帮助,而且比澄清任何事情都产生了更多的困惑,所以这是我尝试提出一个更有条理的问题,并希望得到能帮助更多用户的答案。

我的简化示例:我有一个具有两个不同构造函数的 Java 类

public class ObjectOfInterest {
public ObjectOfInterest(String string, Integer int) { ... }
public ObjectOfInterest(String string1, String string2) { ... }
...
}

我需要对这些构造函数的调用进行一些编译时验证。参数 string2 必须是一些文字,我想根据内容将调用标记为警告(即发出警告,当它不是文字或文字格式不正确时)。

不幸的是,使用 Eclipse 在 Java 中进行验证的文档不容易理解,有时已经过时,在我看来最常见的是不完整,而且似乎没有足够短的工作示例可以在教程中使用。

我的目标:第一步:我想要一个 validator ,用警告标记对两个参数版本的调用 - 只是为了从某个地方开始并了解基础知识。

到目前为止我发现了什么:我见过的几个例子使 public class MyValidator implements IValidator, ISourceValidator 其中 IValidator 需要实现一个方法 public void validate(IValidationContext arg0, IReporter arg1)抛出 ValidationException 并且似乎来自旧版本的验证框架(有时我发现只是带有注释 useless 的空方法),并且 ISourceValidator 需要实现一个方法 public void validate(IRegion arg0, IValidationContext arg1, IReporter arg2) - 这似乎是最新版本。

然后你必须添加一些扩展点到一些plugin.xml(我不是很清楚这个plugin.xml在哪里)。

暗中刺刀:完全不清楚如何使用 IRegionIValidationContextIReporter - 也许我完全走错了路,但我能得到什么?如何在验证中找到该构造函数的调用?

在第一步变得更加清晰之后,我会扩展这个问题。展望 future ,我想添加快速修复构造函数的两个 String 版本的可能性,并以这种方式操作代码 - 但这至少提前了两步,稍后会详细介绍。

最佳答案

首先,我必须要说的是,您正在尝试超越普通的 Java 编程。在编译时没有正常的验证方法,除非使用普通类型可以实现。

您想要做的也超出了使用注解处理器所能做的。注释处理器是一种半标准的处理器,因为它们是标准化的并且是 Java 框架的一部分。它们是在编译期间运行的类,它们将类和方法的签名作为输入,并可用于验证和代码生成。

如果您仍然要这样做有异常的方法,但是:


Eclipse 插件解决方案

您尝试的解决方案似乎是编写一个使用 Eclipse Java 工具进行验证的 Eclipse 插件。这应该可行,我不知道它有多容易,并且验证仅适用于使用 Eclipse 的用户。


检查器解决方案

根据我(有限)的知识,最好的工具是:

Checker Framework 用于静态分析。

它正是用于您想要做的事情。它似乎有据可查且易于设置。例如,它用于对正则表达式语法进行无效性分析和编译时验证。有一个tutorial这听起来很像你的东西。手册中有一章关于creating a new checker .

用这个做一个解决方案可能会花费很多时间和精力,但我也觉得它看起来很有趣!

关于java - 方法参数的编译时验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644170/

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