Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中如何在编译时断言某些东西?_Java - Fatal编程技术网

在Java中如何在编译时断言某些东西?

在Java中如何在编译时断言某些东西?,java,Java,有时,数据结构应该具有某些关系,这些关系不能用Java直接描述,但在编辑代码时最好尽早检查。典型的例子是数组足够大,或者不同模块中的枚举具有相应的成员

有时,数据结构应该具有某些关系,这些关系不能用Java直接描述,但在编辑代码时最好尽早检查。典型的例子是数组足够大,或者不同模块中的枚举具有相应的成员


编辑:我刚刚看到了一个完美的例子:Eclipse中的类有两个假定长度相同的常量数组。如果这是我的代码,我希望编译器告诉我它们是否有不同的长度。

作为IDE(如Eclipse)的一部分提供的增量编译器可以配置为在查找合法java代码时抛出警告或错误,但在运行时可能会导致问题。您可以随意调整这些设置,尽管它可能会变得侵入性和烦人。

您可以使用许多工具

  • 偏振模色散
  • 方格
  • 芬德布格斯
  • 在Jakarta Commons lang中验证方法(我们使用它而不是断言,并将其保留在中)
  • Cobertura/EMMA(用于代码覆盖率)

这些测试和良好的单元测试的结合将收获低挂果实(以及一些更高的东西)

您可以使用注释

有关选项,请参阅


将JSR-308和JSR-305视为java的未来。

+1使用单元测试本质上是一个更接近编译时而非执行时的步骤。我不知道我是否同意“数据结构应该具有某些不能用java直接描述的关系”。您的示例似乎无效。数组大小与程序其余部分的关系可以通过使用变量定义数组大小来表示。如果一个包中有一个枚举,为什么不直接从另一个包引用它呢?事实上,我想不出任何理由让多个枚举有相应的元素。如果Foo应该具有与Bar相同的元素,为什么不在任何地方都使用Foo呢?这不是枚举的要点吗?您能否提供一个更具体的示例,说明您希望能够以这种方式断言的类型?