Tag: compiler warnings

如果在循环中抛出exception,则使用try-with-resources奇怪的“资源泄漏:流永远不会关闭”

为什么Eclipse给出了一个奇怪的“资源泄漏:zin永远不会关闭”警告以下代码,即使我使用try-with-resources : Path file = Paths.get(“file.zip”); // Resource leak warning! try (ZipInputStream zin = new ZipInputStream(Files.newInputStream(file))) { for (int i = 0; i < 5; i++) if (Math.random() < 0.5) throw new Exception(); } catch (Exception e) { e.printStackTrace(); } 如果我在代码上修改“任何东西”,警告就会消失。 下面我列出了3个修改过的版本都没问题(没有警告)。 Mod#1:如果我从try块中删除for循环,则警告消失: // This is OK (no warning) try (ZipInputStream zin = new ZipInputStream(Files.newInputStream(file))) […]

Java:@SuppressWarnings(…)参数的完整列表(在Netbeans中)?

Netbeans提供了很多自定义的“提示”,就像警告一样,只是大多数都无法被抑制(只是全局禁用IDE)。 但现在我查看使用的代码 @SuppressWarnings(“element-type-mismatch”) 抑制被称为“可疑方法调用”的提示/警告(例如对于“错误”类型的集合remove(…) )。 好吧,我永远不会想到使用名为“element-type-mismatch”的SuppressWarnings参数来抑制一个名为“可疑方法调用”的提示,但显然,它有效。 那么,这些参数是否存在“魔力列表”? 例如,我如何抑制提示/警告“收集字段的返回”? 注意:对于此类似问题 ,未列出“元素类型不匹配” 。

我在哪里更改Eclipse中的设置,以便为Serializable类生成serialVersionUID?

我希望Eclipse为实现Serializable类生成serialVersionUID 。 但是,当我创建一个实现Serializable的类时,我的Eclipse实例不会向我发出警告或错误。 此外,它没有提供有关添加生成的serialVersionUID的建议。 我在哪里更改所需的设置?

null类型的参数应该显式地转换为Class 以调用varargs方法

请看下面的示例,第一次调用getMethod()会在Eclipse中生成一个Warning。 第二个不起作用,并因NoSuchMethodException而失败。 对于从Class类型调用varargs方法getMethod(String, Class…) ,类型null的参数应显式转换为Class[] 。 也可以将其转换为Class以进行varargs调用。 我跟着警告,没有任何工作了。 import java.lang.reflect.Method; public class Example { public void exampleMethod() { } public static void main(String[] args) throws Throwable { Method defaultNull = Example.class.getMethod(“exampleMethod”, null); Method castedNull = Example.class.getMethod(“exampleMethod”, (Class) null); } } 第二个调用产生此错误: Exception in thread “main” java.lang.NoSuchMethodException: Example.exampleMethod(null) at java.lang.Class.getMethod(Class.java:1605) at Example.main(Example.java:12) 有人可以向我解释这种行为吗? 什么是避免警告的正确方法?

有没有办法在C#中抑制类似于Java的@SuppressWarnings注释的警告?

有没有办法在C#中抑制类似于Java的@SuppressWarnings注释的警告? 如果失败了,还有另一种方法来抑制Visual Studio中的警告吗?

java:如何使用clone()以及如何使用cast检查

这段代码: class RawStringIterator { java.util.Stack stateStack = new java.util.Stack(); RawStringIterator(RawStringIterator i) { stateStack = (java.util.Stack) i.stateStack.clone(); } /* … */ } 给了我这个警告: Type safety: Unchecked cast from Object to Stack 我想我可以忽略这里的警告。 但我想知道如何使用clone()一般? 每次使用clone()时,我是否总是必须使用@SuppressWarnings(“unchecked”) clone() ? 或者我应该总是进行完全冗余的额外检查吗?

Java中的布尔表达式评估顺序?

假设我有以下表达式 String myString = getStringFromSomeExternalSource(); if (myString != null && myString.trim().length() != 0) { … } Eclipse警告我,在布尔表达式的第二个短语中myString可能为null。 但是,我知道有些编译器会在第一个条件失败时完全退出布尔表达式。 这对Java来说是真的吗? 或者评估顺序无法保证?