![]() |
1
32
我见过的一种技术是将它与单元测试联系起来(你 做 单元测试,对吗?).基本上,创建一个单元测试, 失败 一旦外部资源修复完成。然后,您评论单元测试,告诉其他人如何在问题解决后撤销您的粗糙的黑客攻击。 这种方法真正巧妙的地方在于,撤销黑客攻击的触发因素是修复核心问题本身。 |
![]() |
2
78
我认为由编译器处理的自定义注释是解决方案。我经常在运行时编写自定义注释来做一些事情,但在编译时从未尝试过使用它们。所以,我只能给你一些关于你可能需要的工具的建议:
我不知道这个解决方案是否真的可行。当我有时间的时候,我会自己尝试实现它。 编辑 我成功地实现了我的解决方案。作为奖励,我使用Java的服务提供商设施来简化它的使用。实际上,我的解决方案是一个包含两个类的JAR:自定义注释和注释处理器。要使用它,只需将这个jar添加到项目的类路径中,并注释您想要的任何内容!这在我的IDE(NetBeans)中工作正常。 注释代码:
处理器代码:
要启用结果JAR作为服务提供者,请添加文件
|
![]() |
3
12
一个好的黑客应该得到另一个…我通常通过在hacky方法中引入一个未使用的变量来为所描述的目的生成编译器警告,因此:
此未使用的变量将生成一个警告(取决于编译器),该警告看起来如下: WARNING: The local variable FIXMEtemporaryHackToWorkAroundLibraryBugRemoveMeWhenLibraryIsFixed is never read. 这个解决方案不如自定义注释好,但是它的优点是不需要预先准备(假设编译器已经配置为对未使用的变量发出警告)。我建议这种方法只适用于短期黑客。对于长期存在的黑客,我认为创建自定义注释的努力是合理的。 |
![]() |
4
12
一些快速而不那么肮脏的方法,可能是使用
这将生成一个警告,因为编译器无法将其识别为要禁止显示的特定警告:
|
![]() |
5
8
我写了一个带有注释的库: Lightweight Javac @Warning Annotation 使用非常简单:
编译器将在您的文本中抛出警告消息 |
![]() |
6
5
将方法或类标记为@deprecated怎么样? docs here . 请注意,有@deprecated和@deprecated两种版本-大写d版本是注释,小写d是javadoc版本。JavaDoc版本允许您指定一个任意字符串来解释正在发生的事情。但是,编译器在看到警告时不需要发出警告(尽管很多编译器会发出警告)。注释应该总是引起一个警告,尽管我认为你不能给它添加解释。 更新以下是我刚测试的代码: sample.java包含:
java包含:
当我运行“javac Sample.java SampleCaller .java”时,我得到以下输出:
我使用的是Sun的Javac1.6。如果您想要一个诚实的善意警告而不仅仅是一个注释,请使用-xlint选项。也许这会正确地渗透到蚂蚁身上。 |
![]() |
7
3
我们可以通过注释来实现这一点!
要引发错误,请使用
这里有一个非常简单的注释,我只是想测试一下。
这个
注释处理器会导致错误,如果不是:
例如,这些是
但这些用途
这是一篇博客文章,我发现在开始这个主题时非常有用:
小提示:下面的评论指出的是因为
例如,假设有一个应用程序jar具有以下类:
然后是处理器
在那种情况下,
|
![]() |
8
2
Here 显示了有关注释的教程,在底部给出了定义自己注释的示例。不幸的是,一个快速浏览教程说,这些只有在javadoc中才可用…
因此,您真正能做的似乎只是抛出一个@deprecated标记,编译器将打印出该标记,或者在javadocs中放入一个自定义标记,告诉您该黑客行为。 |
![]() |
9
0
您应该使用一个工具来编译,比如Ant-Ou-Maven。使用它,您应该在编译时定义一些任务,例如,这些任务可以生成关于fixme标记的一些日志(如消息或警告)。 如果你想要一些错误,这也是可能的。比如在代码中留下一些待办事项时停止编译(为什么不这样做?) |
![]() |
10
0
为了让任何警告出现,我发现未使用的变量和custom@suppresswarnings对我不起作用,但不必要的强制转换确实起作用:
现在,当我编译时:
|
![]() |
11
0
如果你用的是Intellij。您可以转到:preferences>editor>todo并添加“\bhack.b*”或任何其他模式。
如果你这样评论
然后在todo工具窗口中,它将与所有其他定义的模式一起在编辑时很好地显示出来。 |