2010-03-25 84 views
4

考虑这是从JNI调用,否则不使用私有的方法,生成编译器警告有关未使用的方法:我可以使用什么来抑制未使用的函数警告?

private void someMethodCalledOnlyFromJNI() { // WARNING: method is never used 
    // .... 
} 

这是在Java 1.4中的一些遗留代码 - 等@SuppressWarnings没有骰子。

你会用什么来抑制这个编译器警告?


编辑:显然,这只是一个警告,它可以很容易被忽略。但是,个人而言,我讨厌我的代码中的警告,就像我不想看到错误一样。 AFAIC - 我的代码应该有0个警告,这可能是夸张的,但我对此很迂腐。

就像一个例子,有人可能会看到这个函数,不知道它是从JNI中使用的,只是简单地删除它。

+0

是这个日食btw? – Bozho 2010-03-25 13:29:18

+0

使用javac编译时,您会得到相同的警告。 – BalusC 2010-03-25 13:30:12

+0

如果您启用比默认值更多的详细警告,我只会收到来自javac的警告我相信 – 2010-03-25 13:36:00

回答

6
  1. 忽略它。这是一个警示,毕竟 - 最佳选择
  2. 使用protected(并添加注释的原因) - 惬意
  3. 让它上面的一个虚拟的方法,使两个呼叫对方(再次有评论) -
  4. 配置IDE不显示在所有此警告(在eclipse它是Windows > Preferences > Java > Compiler > Errors/Warnings) - 不可取

由于根据你的更新:有0个警告不是你应该设置的目标。警告的数量取决于设置,因此如果您不是全部具有统一的IDE,则此数字会有所不同。然后你可以添加checkstyle/PMD来报告警告 - 那么你会有更多的警告。合理的行为是有一个警告阈值。

如果你不希望任何人删除此方法,只需添加一个注释:

// This method is used is used by JNI. (Don't delete) 
+0

重1. - 请参阅我的编辑。恕我直言,这是最糟糕的**选项。 – 2010-03-25 13:30:38

+1

如果你不想让任何人删除这个方法,只需添加** PROPER JAVADOC解释它是什么以及它是怎么做的** ** **单元测试断开时如果它被删除**。 – Freiheit 2010-03-25 13:45:14

3

要么忽略该警告,要么将其声明为protected。如果您使用protected并且想要防止子类/覆盖,那么也要声明它为final

+2

更改方法的可见性以抑制警告只是一个糟糕的想法。 – mgv 2010-03-25 13:27:53

+1

我确实宁愿忽略这个警告。但是OP从字面上要求“黑客”。黑客总是讨厌:) – BalusC 2010-03-25 13:28:15

+1

只是配置日食忽略那种警告:) – mgv 2010-03-25 13:29:18

1

首先,它只是一个警告,因此它不应该是一个问题给你。

您可以修改代码以删除该功能,从而消除该问题。

或者只是从代码开始/结束时的某处调用它,并忽略任何结果。只要不打算设置任何会影响程序其余部分的事情,你都会好起来的。

0

你可以把它公开。如果是旧的代码我相信没有人会在其他类投诉:)

+0

在这种情况下,我只是使它受到保护,相同的效果:) – 2010-03-25 13:31:42

5

某处:

 if(Boolean.FALSE.booleanValue()) 
    { // prevents warning for unused private method which is used from JNI 
     someMethodCalledOnlyFromJNI(); 
    } 

(不能用简单的false因为在死代码警告结果)。

+0

**对** hack ** :) – 2010-03-25 13:31:11

+7

+1编码的事情,最终将显示在thedailywtf.com同时仍然回答OP的问题。 – NotMe 2010-03-25 13:33:45

+1

不错的@Chris – 2010-03-25 13:34:46

相关问题